
Ich habe eine aaa.service
Datei (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 start
erstellt die PID-Datei und service aaa status
zeigt 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 status
sollte 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.service
wenn 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