systemd 单元启动了多个实例而不是一个

systemd 单元启动了多个实例而不是一个

我正在尝试设置一个 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

相关内容