如何正确停止bash脚本?

时间:2017-05-30 13:24:53

标签: supervisord ubuntu-server

我在/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。

谢谢

1 个答案:

答案 0 :(得分:0)

由于启动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