2017-05-30 108 views
0

我有這樣的/etc/supervisor/conf.d/myscript.conf如何正確停止bash腳本?

[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 

這是工作,但是當我停下來主管這個binaryfile繼續運行。

我知道會有類似的問題,爲什麼不手動複製該文件,然後由主管執行,但這是不可能的,因爲該文件被動態傳遞給myscript.sh。

謝謝

回答

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