【发布时间】:2016-08-08 04:03:20
【问题描述】:
背景:
我有一个 Python 脚本,它在 Ubuntu 服务器的后台启动时(无限地)运行。该过程通过发送一个 SIGINT 结束,该脚本由在退出之前完成所有作业的脚本处理。如果有人关闭服务器,从而终止脚本,重要数据将会丢失。我想知道是否有办法在关闭之前等待脚本完成,或者完全阻止关闭(如果阻止它可以显示一条消息会很好)。
尝试:
我的 Python 脚本 (test.py) 有一个 SIGINT 处理程序,当它接收到 SIGINT 时,它会在退出之前完成所有任务。我编写了以下 shell 脚本:
PROCESS=$(pgrep -f 'python test.py')
echo $PROCESS
kill -2 $PROCESS
while kill -2 $PROCESS 2> /dev/null; do
sleep 1
done
这个脚本会不断地向 python 脚本发送 kill 命令,直到它退出(它在运行时工作)。我将脚本放在 init.d 目录中,在脚本上使用 chmod -x,对名称以 K99 开头的 rc0.d 和 rc6.d 目录进行符号链接。由于 rc0.d/rc6.d 目录中的脚本在关机/重启时运行,因此该脚本应该(理论上)运行并等待 Python 脚本完成关机/重启。这似乎不起作用。它在未完成任务的情况下关闭/重新启动。
【问题讨论】:
-
如果你的脚本自己正确运行,问题可能在于你如何挂钩它。如果您确定它可以运行,则问题可能是它所需的资源已被禁用(磁盘已卸载?),或者可能是其他东西已经杀死了您的进程。如果没有这些事情的细节,我们所能做的就是推测;在任何情况下都不是严格的编程问题(或者至少不是您发布的代码)。
-
如果你有
pgrep,我猜你有pkill。 -
也许用
shutdown -c替换sleep 1?