【问题标题】:How to properly stop bash script?如何正确停止 bash 脚本?
【发布时间】:2017-05-30 13:24:53
【问题描述】:

我在 /etc/supervisor/conf.d/myscript.conf 中有这个

[program:my_script]
directory=/var/www/myfolder
command=/var/www/myscript.sh
numprocs=1
process_name=%(program_name)s
autostart=true
autorestart=true
user=root
stopsignal=KILL

这是 myscript.sh 的内容:

#!/bin/bash
cp -n /var/www/binaryfolder/binaryfile /var/www/myfolder
/var/www/myfolder/binaryfile

这是有效的,但是当我停止主管时,这个二进制文件会继续运行。

我知道会有一些问题,比如为什么不手动复制该文件然后由主管执行,但这是不可能的,因为该文件是动态传递给 myscript.sh 的。

谢谢

【问题讨论】:

    标签: supervisord ubuntu-server


    【解决方案1】:

    由于启动binaryfile是最后一个命令,你可以通过修改myscript.sh为轻松解决问题

    #!/bin/bash
    cp -n /var/www/binaryfolder/binaryfile /var/www/myfolder
    exec /var/www/myfolder/binaryfile
    

    请注意,exec 添加在最后一行的开头,它将 shell 进程替换为二进制文件进程,因此 supervisord 停止了该进程。欲了解更多信息,您可以查看

    http://veithen.github.io/2014/11/16/sigterm-propagation.html

    如果你完全想通过 supervisord 配置解决这个问题,并且你的 supervisord 版本大于或等于 3.0b1,你可以添加 stopasgroup=true 参数。

    所以你的新配置文件应该是

    [program:my_script]
    directory=/var/www/myfolder
    command=/var/www/myscript.sh
    numprocs=1
    process_name=%(program_name)s
    autostart=true
    autorestart=true
    user=root
    stopsignal=KILL
    stopasgroup=true
    

    有关 supervisord 配置的更多信息,请查看: http://supervisord.org/configuration.html#program-x-section-settings

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2019-02-06
      • 1970-01-01
      • 2021-12-11
      • 2015-09-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      相关资源
      最近更新 更多