![如何使用服务文件中的 shell 脚本启动 systemd 监视进程?](https://linux22.com/image/747566/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%9C%8D%E5%8A%A1%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20shell%20%E8%84%9A%E6%9C%AC%E5%90%AF%E5%8A%A8%20systemd%20%E7%9B%91%E8%A7%86%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我在 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
但也没有帮助。任何帮助都将不胜感激!