我试图杀死所有出现的过程,实际上在第一个项目之后迭代停止的是什么,这里有什么问题?
#!/usr/bin/env bash
SUPERVISORCLS=($(pidof supervisorctl))
for i in "${SUPERVISORCLS[@]}"
do
echo $i
exec sudo kill -9 ${i}
done
在我尝试这样作为重启脚本的解决方案之前,但是脚本并不总是执行总计只有一个if块被执行。?
ERROR0=$(sudo supervisord -c /etc/supervisor/supervisord.conf 2>&1)
if [ "$ERROR0" ];then
exec sudo pkill supervisord
exec sudo supervisord -c /etc/supervisor/supervisord.conf
echo restarted supervisord
fi
ERROR1=$(sudo supervisord -c /etc/supervisor/supervisord.conf 2>&1)
if [ "$ERROR1" ];then
exec sudo pkill -9 supervisorctl
exec sudo supervisorctl -c /etc/supervisor/supervisord.conf
echo restarted supervisorctl
fi
答案 0 :(得分:2)
exec
将可执行文件替换为您的进程,因此在您访问exec
后,您永远不会在脚本中执行另一个语句。您的流程将不复存在。在第一个示例中,您的流程将不再是您的脚本,在第二个示例中它将是kill
和pkill
。
要解决此问题,只需从所有这些行中删除exec
即可。不需要它。执行脚本时,shell将在每一行执行命令,你不必告诉它这样做。