我有一个 bash 脚本,它下载一些数据,运行一个进程来导入它,然后休眠一小会儿(大约一个小时)。它作为 systemd 服务运行良好(在 Ubuntu 16.04 和 18.04 上)
但我担心中断导入过程会导致数据库处于不一致状态,所以我想防止它被中断。即systemctl stop mything
应该阻塞直到导入过程完成。过程中的其他步骤可以随意中断。
在 bash 脚本中是否有任何简单的方法可以运行命令并说“不要将信号传播SIGKILL
到此命令”?(nohup
块SIGHUP
)。对于其他类似的脚本,我使用 bash 来trap
“捕获”阻止 bash 终止进程的信号,但随后sleep
并没有终止进程,因此我不得不在后台运行 sleep 并wait
继续执行(然后在信号处理程序中终止 sleep)。这似乎过于复杂。
有没有更好的方法?是否有nosigkill
命令(如nohup
)可以阻止该命令的 sigkill?
答案1
您可以设置FinalKillSignal=
转换为不同于 SIGKILL 的信号,例如 SIGCONT。
请注意,systemd 会因无法停止服务而非常恼火,但它应该继续运行。