Systemd - Umstieg mit eigenen Skript nicht leicht

Hinweis: In dem Thema Systemd - Umstieg mit eigenen Skript nicht leicht gibt es 4 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Systemd - Umstieg mit eigenen Skript nicht leicht

    Neu

    Hallo Zusammen,
    das ist mein erster Post hier in dem Forum,
    irgendwie finde ich weder hier noch im Internet die passende Info.

    Ich habe ein altes Skipt (das recht umfangreich ist) in die Systemd Umgebung eingebunden:

    Quellcode

    1. [Unit]
    2. Description=Beschreibung
    3. After=multi-user.target sshd.service network-online.target remote-fs.target socke ts.target cloud-config.target cloud-init.target
    4. Requires=sshd.service network-online.target uuidd.socket network.target sockets.t arget remote-fs.target cloud-config.target cloud-init.target
    5. Before=shutdown.target reboot.target halt.target
    6. [Service]
    7. Type=forking
    8. RemainAfterExit=true
    9. KillMode=none
    10. SendSIGKILL=no
    11. TimeoutSec=15min
    12. TimeoutStopSec=15min
    13. User=root
    14. #Type=forking
    15. PIDFile=/var/run/sapauto
    16. ExecStart=/bin/sh -c "/opt/sysmgmt/sap/meins/meins.sh ALL start"
    17. ExecStop=/bin/sh -c "/opt/sysmgmt/sap/meins/meins.sh ALL stop"
    18. ExecStopPost=/usr/bin/rm -f /var/run/meins
    19. [Install]
    20. WantedBy=multi-user.target
    Alles anzeigen





    Fehler im Skript scheinen dazu zu führen dass er meint meine Applikation ist nicht oben.


    Quellcode

    1. vhostxx5:/etc/systemd/system # systemctl status mein.service
    2. mein.service - Mein Start-Stopumgebung
    3. Loaded: loaded (/etc/systemd/system/sapauto.service; enabled)
    4. Active: failed (Result: resources) since Mon 2017-11-13 17:09:20 CET; 11s ago
    5. Process: 16749 ExecStart=/bin/sh -c /opt/sysmgmt/sap/meins/mein.sh ALL start (code=exited, status=0/SUCCESS)

    Quellcode

    1. Nov 13 17:09:20 vhostdm5 sh[16749]: unicode enabled version
    2. Nov 13 17:09:20 vhostdm5 sh[16749]: R3trans finished (0000).
    3. Nov 13 17:09:20 vhostdm5 sh[16749]: *** Aktion: R3Trans aufruf nach start
    4. Nov 13 17:09:20 vhostdm5 sh[16749]: *** RC der Aktion 0 - Hoechster RC: 1 - Zeitstempel: 17:09-20
    5. Nov 13 17:09:20 vhostdm5 sh[16749]: **************************************************************************
    6. Nov 13 17:09:20 vhostdm5 sh[16749]: *** FALLS FEHLER IN DB CONNECT GEG. AUCH DB SERVER STARTEN UND PRUEFEN ***
    7. Nov 13 17:09:20 vhostdm5 sh[16749]: **************************************************************************
    8. Nov 13 17:09:20 vhostdm5 sh[16749]: ***** Returncode: 1
    9. Nov 13 17:09:20 vhostdm5 sh[16749]: RC= 1 - Erstelle eine Email
    10. Nov 13 17:09:20 vhostdm5 sh[16749]: SAPAUTOMSA Version V1.5 SAPAUTO TICKET run on 17.11.13_17:08:55
    Bitte Code-Tags für Konsolenausgaben benutzen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von SAPonLin ()

    Für den Inhalt des Beitrages 114753 haftet ausdrücklich der jeweilige Autor: SAPonLin

  • Neu

    Ich habe in dem Skript mit "exit 0" verlassen - trotzdem ist der Service als Fehlerhaft markiert.

    Woran liegt das? ( Fehler auf dem srderr ??? )

    Wie kann ich den Fehler unterdrücken - der Dienst wird ja gestartet.

    Beim Stop wird aufgrund des für Ihn fehlerhaften Startes der Stopaufruf gar nicht ausgeführt.
    Was kann ich tun um das zu erzwingen?

    Für den Inhalt des Beitrages 114759 haftet ausdrücklich der jeweilige Autor: SAPonLin

  • Neu

    Ohne dein Script kann man nicht viel sagen.

    Ich schätze, dass halt dein Script normal endet, wenn es irgendwas erledigt hat.

    Zudem scheint das Script eher ein altes InitV Script zu sein.
    Da genügt es doch das schlicht, wenn es sauber installiert ist,
    mit der systemd- Kompatibilitätsschicht laufen zu lassen.
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 114762 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • Neu

    Hallo Berechtigung,

    danke schon mal!


    Das Script ist eine "Eigenkreation" von einem Kollegen und mir und recht komplex.

    Es wurde unter init.d entwickelt und getestet - als Shellskript mit einigen "switch User" Anweisungen.


    Wie läuft das mit der Kompatibilitätsschicht?

    Muss ich dazu was installieren / Konifgurieren?

    Oder einfach in /etc/init.d verlinken wie eh und je?

    Berichtigung schrieb:

    Zudem scheint das Script eher ein altes InitV Script zu sein.

    Da genügt es doch das schlicht, wenn es sauber installiert ist,
    mit der systemd- Kompatibilitätsschicht laufen zu lassen.

    Für den Inhalt des Beitrages 114769 haftet ausdrücklich der jeweilige Autor: SAPonLin

  • Neu

    Das Script muss vor allem ein echtes Init Script sein.
    Also der LSB Spec folgen. (Mindestens am Anfang ein korrekter Kommentarblock mit den definierten Einträgen)

    Es genügt tatsächlich das Script nach /etc/init.d zu kopieren.
    Und ab da kannst du mit systemctl enable dingens.service && systemctl start dingens.service das Ding laufen lassen.
    Die Kompatibiltätsschicht läuft automatisch bei Systemstart, oder auf Geheiß.
    Es werden dabei entsprechende service- Files erzeugt.

    Du kannst das Service-File natürlich auch händisch machen.
    Beides geht.

    Wichtig dabei ist, dass du systemd irgendwie mitteilst, was es denn überwachen soll.
    Es ist ja i.d.R. nicht das Script, sondern halt irgend ein anderer Prozess. um den es eigentlich geht.
    (Dazu kann ich immer noch nichts sagen, da euer Script noch immer fehlt)

    Also wird dein Script dafür sorgen müssen, dass ein korrekter Pid-File Pathname an systemd geht.
    Ob du das in deinem Service-File mit PIDFile= erledigst,
    oder den Pathnamen korrekt im InitV Script setzt, bleibt dir überlassen.

    Aber es muss gültig und korrekt sein.

    Wird nichts angegeben, so wird die PID des Shellscripts, das ja meist einfach endet, wenn die entsprechenden Jobs gestartet sind, verwendet.
    Und das erscheint dann im Listing natürlich als tot.
    Was ja korrekt ist.
    Das ist meist der Normalfall.

    Und wahrscheinlich habt ihr genau diesen Makel.
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 114772 haftet ausdrücklich der jeweilige Autor: Berichtigung

www.cyberport.de