我们正在使用 Upstart 启动/终止内部开发的二进制文件。
在此二进制文件的 Upstart 配置文件中,我们将脚本定义为:
script
exec su - user -c "screen -D -m -S $product /opt/bin/prog /opt/cfg/$product -v 5 --max_log_size=7"
end script
当运行级别设置为 5 时,Upstart 启动脚本。当运行级别设置为 3 时,Upstart 将终止脚本。
我的问题是,Upstart 正在发送一个 SIGTERM,然后是一个 SIGKILL。
SIGTERM 由屏幕“处理”,而不是由我的自定义二进制文件,因此我们二进制文件中的信号处理程序没有得到 SIGTERM,因此无法干净地关闭。
我已经验证了我们二进制文件中的信号处理程序确实允许它在不通过屏幕启动时干净地关闭。