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=forking
die MainPID nicht berücksichtigt wird. Ich habe versucht, sie durch zu ersetzen, type=simple
aber das hat auch nicht geholfen. Jede Hilfe wird wirklich geschätzt!