Systemd:当子进程崩溃时停止主进程(或服务)

Systemd:当子进程崩溃时停止主进程(或服务)

我有两个程序program1program2它们执行两个操作的主要任务。当program1开始运行时,它将其结果通过管道传输到program2执行最终结果。因为这两个程序都必须连续运行,所以我为此实现了一个 systemd 服务,这是/lib/systemd/system/servers.service文件的内容。

[Unit]
Description=Start servers
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/servers >> /var/log/servers.log
Restart=always
TimeoutStartSec=100
User=root

ExecStartPre=killall -w -q program1 && killall -w -q program2
User=root

ExecStopPost=killall -w -q program1 && killall -w -q program2
User=root

[Install]
WantedBy=multi-user.target

当运行服务时,systemd创建两个进程来实现任务,在这里你可以看到状态。

sudo service servers status
# result
● servers.service - Start servers
   Loaded: loaded (/lib/systemd/system/servers.service; enabled)
   Active: active (running) since Wed 2016-06-29 21:00:27 UTC; 2h 5min ago
 Main PID: 11942 (server)
   CGroup: /system.slice/servers.service
           ├─11942 program1
           └─11944 program2

当其中一个程序崩溃时,服务仍处于运行状态,这在逻辑上不正确,因为主要任务已停止。

请问我是否可以使用systemd服务来实现这种情况?如果是这样,怎么办?

相关内容