systemd erkennt keinen toten Daemon-Prozess

systemd erkennt keinen toten Daemon-Prozess

Ich habe eine aaa.serviceDatei (die den JBoss steuert), die neben anderen normalen Dingen enthält

[Service]
Type=forking
ExecStart=/my/script start
ExecReload=/my/script restart
ExecStop=/my/script stop
PIDFile=...

/my/script starterstellt die PID-Datei und service aaa statuszeigt sie mit einer seltsamen Warnung an:

Supervising process xxx which is not our child. We'll most likely not notice when it exits.

Vollständige Ausgabe:

   Loaded: loaded (/etc/systemd/system/aaa.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-01-22 20:55:16 CET; 34min ago
  Process: 32435 ExecStart=/my/script start (code=exited, status=0/SUCCESS)
 Main PID: 32542
    Tasks: 0 (limit: 512)
   CGroup: /system.slice/aaa.service

Jan 22 20:54:56 I011-830 su[32447]: (to aaa) root on none
Jan 22 20:54:56 I011-830 su[32447]: pam_unix(su-l:session): session opened for user aaa by (uid=0)
Jan 22 20:55:16 I011-830 aaa[32435]: Starting JBoss application server: Starting JBoss application server:
Jan 22 20:55:16 I011-830 systemd[1]: aaa.service: Supervising process 32542 which is not our child. We'll most likely not notice when it exits.

Mein eigentliches Problem ist nun, dass systemd es nicht erkennt, wenn der Prozess auf andere Weise als durch die Ausgabe beendet wird service aaa stop. Vielmehr behauptet es, dass der Prozess läuft und möchte ihn nicht erneut starten:

# cat <pid-file>
No such file or directory
# service aaa status
   Loaded: loaded (/etc/systemd/system/aaa.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-01-22 20:55:16 CET; 40min ago
  Process: 32435 ExecStart=/konsens/app/aaa/init/aaastart (code=exited, status=0/SUCCESS)
 Main PID: 32542
    Tasks: 0 (limit: 512)
   CGroup: /system.slice/aaa.service
 ...
# service aaa start
# <--- Instant return, no process started

Wie kann ich folgende Ziele erreichen?

  • systemd sollte in der Lage sein, meinen Dienst zu starten und zu stoppen
  • service aaa statussollte den Status des Prozesses anzeigen, unabhängig davon, ob er von systemd gestartet wurde oder manuell ausgegeben wurde/my/service start
  • systemd sollte in der Lage sein, den Dienst zu starten, nachdem er manuell beendet wurde
  • systemd sollte in der Lage sein, den Dienst zu stoppen, den ich manuell gestartet habe

Antwort1

Wie kann ich folgende Ziele erreichen? 1 systemd sollte in der Lage sein, meinen Dienst zu starten und zu stoppen

Die meisten Distributionen sind abwärtskompatibel, sodass Sie Ihren Dienst in /etc/init.d/ speichern können, wenn Sie keinen nativen Dienst erstellen möchten.

2 service aaa status sollte den Status des Prozesses anzeigen, unabhängig davon, ob er von systemd gestartet wurde oder manuell /my/service start ausgegeben wurde.

Eine Möglichkeit hierzu besteht darin, in Ihr Skript eine Prüfung einzufügen, die es aufruft, systemctl start aaa.servicewenn es nicht von Anfang an auf diese Weise aufgerufen wurde. Zum Beenden kann eine Falle verwendet werden.

3 systemd sollte in der Lage sein, den Dienst zu starten, nachdem er manuell beendet wurde

gelöst durch #2

4 systemd sollte in der Lage sein, den Dienst zu stoppen, den ich manuell gestartet habe

gelöst durch #2

verwandte Informationen