防止关闭/重启,直到后台Python脚本完成

时间:2016-04-16 03:15:01

标签: bash shell unix ubuntu sh

背景

我有一个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,将符号链接到rc0.d和rc6.d目录,名称以K99开头。由于rc0.d / rc6.d目录中的脚本在shutdown / reboot运行,脚本应该(理论上)运行并等到python脚本完成shutdown / reboot。这似乎不起作用。它在没有完成任务的情况下关闭/重新启动。

1 个答案:

答案 0 :(得分:1)

系统已经向所有正在运行的进程发送信号,作为正常关闭序列的一部分,但它不是SIGHUP。更改您的程序以处理SIGTERM代替(或者,也涵盖所有可能性。当您使用它时,也可以添加SIGINT。)

您无需向关闭脚本添加任何内容;我想你无法让它工作的原因是,当你的脚本运行时,该过程已经终止。