Erzwingt, dass systemd den Status des Dienstes nach n Sekunden überprüft

Erzwingt, dass systemd den Status des Dienstes nach n Sekunden überprüft

Ich habe einen systemd-Dienst (für heka), der mir einige Kopfschmerzen bereitet.

Das Problem ist, dass „start“ erfolgreich zurückkehrt, selbst wenn der Heka-Daemon kurz nach dem Start beendet wird. Dies geschieht, wenn die Konfigurationsdateien falsch sind. Beispiel: Der Prozess wird gestartet, überprüft die Konfiguration und beendet sich, wenn er mit dem Ergebnis nicht zufrieden ist. Systemd kehrt in diesem Fall erfolgreich zurück.

Gibt es eine Möglichkeit, systemd zu zwingen, den Programmstatus nach der Initialisierung zu überprüfen? Vielleicht indem man n Sekunden nach dem Start des Prozesses in den Ruhezustand wechselt?

Dies ist das Skript:

    [Unit]
    Description=Heka event/metric/log collection and routing daemon
    After=network.target auditd.service
    ConditionPathExists=!/etc/heka/hekad_not_to_be_run

    [Service]
    EnvironmentFile=-/etc/default/heka
    Type=simple
    PIDFile=/var/run/hekad.pid
    ExecStart=/usr/bin/hekad -config=/etc/heka
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    StandardError=inherit

    [Install]
    WantedBy=multi-user.target
    Alias=heka.service

Antwort1

Sie können mehrere ExecPostStart-Befehle miteinander verketten. Und Sie können sie ausführen, selbst wenn der Haupt-ExecStart fehlgeschlagen ist, indem Sie einen-/(systemd.service: Typ=). Etwas wie das:

ExecStart=-/usr/bin/hekad -config=/etc/heka
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/kill -0 $MAINPID &>/dev/null

Dadurch wird sichergestellt, dass Sie die Funktion weiterhin MAINPIDverwenden können, wenn Sie beispielsweise den Dienst stoppen oder neu starten.

Antwort2

Wenn es eine einfache Möglichkeit gibt, zu prüfen, ob hekadnoch aktiv ist, würde ich den Daemon starten ExecStartPre=/usr/bin/hekad -config=/etc/hekaund ExecStartein kleines Skript ausführen, das eine Schleife enthält, die zuerst X Sekunden lang schläft und dann prüft, ob der Hekad-Daemon noch läuft. Die Schleife wird nur unterbrochen, wenn es so hekadaussieht, als ob er gestoppt wurde.

Antwort3

Sie sollten verwenden, ExecStartPostum einen Befehl oder ein Skript zu starten, das in den Ruhezustand wechselt und dann eine Prüfung ausführt. Wenn dies ungleich Null endet, gilt die Einheit als fehlerhaft.

Sehen:https://www.freedesktop.org/software/systemd/man/systemd.service.html

verwandte Informationen