长时间运行的 bash 更新脚本循环。如何更好地处理终止?

长时间运行的 bash 更新脚本循环。如何更好地处理终止?

我有一个 bash 脚本,它下载一些数据,运行一个进程来导入它,然后休眠一小会儿(大约一个小时)。它作为 systemd 服务运行良好(在 Ubuntu 16.04 和 18.04 上)

我担心中断导入过程会导致数据库处于不一致状态,所以我想防止它被中断。即systemctl stop mything应该阻塞直到导入过程完成。过程中的其他步骤可以随意中断。

在 bash 脚本中是否有任何简单的方法可以运行命令并说“不要将信号传播SIGKILL到此命令”?(nohupSIGHUP)。对于其他类似的脚本,我使用 bash 来trap“捕获”阻止 bash 终止进程的信号,但随后sleep并没有终止进程,因此我不得不在后台运行 sleep 并wait继续执行(然后在信号处理程序中终止 sleep)。这似乎过于复杂。

有没有更好的方法?是否有nosigkill命令(如nohup)可以阻止该命令的 sigkill?

答案1

您可以设置FinalKillSignal=转换为不同于 SIGKILL 的信号,例如 SIGCONT。

请注意,systemd 会因无法停止服务而非常恼火,但它应该继续运行。

相关内容