背景:
我有一个 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
该脚本将不断kill
向 python 脚本发送命令,直到其退出(运行时有效)。我将脚本放入/etc/init.d
目录中,chmod -x
在脚本上执行,对名称以 K99 开头的/etc/rc0.d
和目录建立符号链接。/etc/rc6.d
由于/etc/rc0.d
//etc/rc6.d
目录中的脚本在关机/重启时运行,因此该脚本(理论上)应该运行并等待,直到 python 脚本完成关机/重启。这似乎不起作用。它会在未完成任务的情况下关闭/重新启动。
帮助将不胜感激。
答案1
您将脚本链接到K99
.更改运行级别时,将使用 option 调用 K* 脚本stop
,并使用 option 调用 S* 脚本start
,或者stop
针对运行级别 0(关闭)。它们按数字顺序调用。
因此,您应该删除K99
链接并用链接替换它们K00
,以便首先执行它们(在实际停止系统的脚本之前!)。