我有两个程序program1
,program2
它们执行两个操作的主要任务。当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服务来实现这种情况?如果是这样,怎么办?