我在 Linux 中編寫了一個服務文件,該文件調用一個腳本來啟動多個進程,其中一個進程作為主進程,其他進程作為輔助進程。
服務檔案:
[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
當服務啟動時,狀態顯示如下:
[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
可以看到,主行程與狀態中的MAIN PID相同。但是,當我終止該進程時,systemd 應該會自動重新啟動該進程。這在我的例子中沒有發生。我在另一個答案中讀到,在 的情況下type=forking
,不考慮 MainPID。我嘗試用它替換它,type=simple
但這也沒有幫助。任何幫助將非常感激!