使用关机时运行的 shell 脚本防止关机

使用关机时运行的 shell 脚本防止关机

背景:

我有一个 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,以便首先执行它们(在实际停止系统的脚本之前!)。

相关内容