我有一个简单的 bash 脚本:
echo "Starting"
function sigint {
echo "sigint"
}
function sigterm {
echo "sigterm"
}
trap sigterm SIGTERM
trap sigint SIGINT
while true
do
sleep 2
echo "-"
done
我使用这个配置文件通过 upstart 启动这个脚本:
description "start trapper"
kill timeout 1
script
./home/ubuntu/trapper.sh >> /home/ubuntu/log.txt
end script
post-stop script
echo "finished" >> /home/ubuntu/log.txt
end script
当我使用 upstart 启动它时,我可以在 中监视它的输出/home/ubuntu/log.txt
。问题是,当我停止我的工作时,我看到 sigterm 被发送到我的程序(它打印它),然后我直接看到“完成”(写在停止后脚本中),但我仍然看到每 2 秒打印一次“-”...
所发生的情况是,upstart 永远不会向我的脚本发送 SIGKILL,即使它说停止成功(因为它进入了停止后脚本)。
任何帮助都将非常有帮助!
答案1
它最有可能向 shell 发送 SIGKILL。尝试exec
在 之前添加./home/ubuntu/trapper.sh
。