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.
  • 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:






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



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


    Code
    Nov 13 17:09:20 vhostdm5 sh[16749]: unicode enabled version
    Nov 13 17:09:20 vhostdm5 sh[16749]: R3trans finished (0000).
    Nov 13 17:09:20 vhostdm5 sh[16749]: *** Aktion: R3Trans aufruf nach start
    Nov 13 17:09:20 vhostdm5 sh[16749]: *** RC der Aktion 0 - Hoechster RC: 1 - Zeitstempel: 17:09-20
    Nov 13 17:09:20 vhostdm5 sh[16749]: **************************************************************************
    Nov 13 17:09:20 vhostdm5 sh[16749]: *** FALLS FEHLER IN DB CONNECT GEG. AUCH DB SERVER STARTEN UND PRUEFEN ***
    Nov 13 17:09:20 vhostdm5 sh[16749]: **************************************************************************
    Nov 13 17:09:20 vhostdm5 sh[16749]: ***** Returncode: 1
    Nov 13 17:09:20 vhostdm5 sh[16749]: RC= 1 - Erstelle eine Email
    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

    Einmal editiert, zuletzt von SAPonLin ()

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

  • 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

  • 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.

  • 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?

    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

  • 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.