Wie kann man systemd-Monitorprozesse mithilfe eines Shell-Skripts in der Servicedatei starten?

Wie kann man systemd-Monitorprozesse mithilfe eines Shell-Skripts in der Servicedatei starten?

Ich habe in Linux eine Servicedatei geschrieben, die ein Skript aufruft, das mehrere Prozesse startet, von denen einer der primäre und die anderen der sekundäre Prozess ist.

SERVICEDATEI:

[Unit]
Description=TEST service

Requires=abc.service
Wants=def.service

RefuseManualStop=yes

[Service]
Type=Forking
KillSignal=SIGTERM
# We prefix '-' to tell systemd that ignore the non-zero return values on stop service
ExecStart=-/bin/bash test_abc.sh
ExecStopPost=-/root/.abc/abc_stop.sh
# On reload we just perform restart of service
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
PIDFile=/var/run/abc.pid

[Install]
WantedBy=multi-user.target

Und wenn der Dienst startet, wird der Status wie folgt angezeigt:

[root@CentOS-126 core]# systemctl status abc.service
� abc.service - ABC service
   Loaded: loaded (/usr/lib/systemd/system/abc.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-01-22 14:13:45 IST; 43s ago
  Process: 13286 ExecStopPost=/root/.abc/abc_stop.sh (code=exited, status=0/SUCCESS)
 Main PID: 13691 (abc-00)
   CGroup: /system.slice/abc.service
           ��13691 /usr/sbin/abc -c 0x111 --proc-type=primary
           ��13745 abctm
           ��13756 /usr/sbin/abc -c 0x111 --proc-type=secondary
           ��13776 /usr/sbin/abc -c 0x111 --proc-type=secondary

Wie Sie sehen, ist der primäre Prozess im Status derselbe wie MAIN PID. Wenn ich den Prozess jedoch beende, sollte systemd den Prozess automatisch neu starten. Was in meinem Fall nicht passiert. Ich habe in einer anderen Antwort gelesen, dass im Fall von type=forkingdie MainPID nicht berücksichtigt wird. Ich habe versucht, sie durch zu ersetzen, type=simpleaber das hat auch nicht geholfen. Jede Hilfe wird wirklich geschätzt!

verwandte Informationen