我正在尝试设置一个 systemd 单元,如果它失败,它应该重新启动 bash 脚本。
[Unit]
Description=Bash script Service
[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=/bin/bash -c '/simple/bash/script.sh'
但systemctl status the_bash_script.service
看起来它是从多个实例开始的:
● the_bash_script.service - Bash script Service
Loaded: loaded (/etc/systemd/system/the_bash_script.service; static; vendor preset: enabled)
Active: active (running) since Thu 2016-11-03 18:16:53 CET; 3 years 6 months ago
Main PID: 1766 (bash)
CGroup: /system.slice/the_bash_script.service
├─1766 /bin/bash -c '/bin/bash -c '/simple/bash/script.sh'
└─1778 /bin/bash -c '/bin/bash -c '/simple/bash/script.sh'
为什么有2个pid 1766和1778?我一次只能允许一个实例吗?
如果这是 the_bash_script.service 的内容,我不需要同时运行多个实例:
#!/bin/bash
while [ true ]; do
cat /dev/virtual | nc -v 192.168.1.1 5005
sleep 5s
done
exit
答案1
您的ExecStart=/bin/bash -c '/simple/bash/script.sh'
包含 /bin/bash -c
使用命令启动 bash shell /simple/bash/script.sh
,然后当脚本开始执行时,/simple/bash/script.sh
我认为它将启动另一个 bash shell。
在您的服务文件中尝试此操作:
ExecStart=/simple/bash/script.sh
另请添加以下行并尝试:
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure