如果脚本在不使用 crontab 的情况下停止,则重新启动该脚本

如果脚本在不使用 crontab 的情况下停止,则重新启动该脚本

我使用 Ubuntu 14.04。我有一个应该随时运行的脚本。最简单的方法是使用 crontab 运行另一个脚本来检查 script1 是否正在运行,如果没有则重新启动它。

我想避免 crontab 和如果可能的话任何 su 命令(我想在没有任何额外设置的情况下以 root 身份运行它)。另外,作为 root,我有一个脚本,每天为我计划运行 script1 的用户清理(杀死)所有进程一次。我想在清理后以及在此间隔期间(如果 script1 停止)重新启动 script1。

答案1

将脚本安装为systemd服务。如果 systemd 退出,它会自动重新启动。

这并不是很困难,您需要编写一个短something.service文件(Restarts=always其中包含某个位置),将其放置/链接到适当的目录中,然后发出几个systemctl命令。看这里获取教程。

PS:14.04 中 systemd 可用,但系统本身使用不多。在以后的版本中它变得更加普遍。

答案2

一般来说,一个进程只能由正在运行的进程启动。如果脚本帐户的所有进程都被终止,则解决方案只能超出该用户的范围。但这两种情况(被 root 杀死与崩溃/退出)可以以不同的方式处理。

退出后重新启动

这个很简单:

#! /bin/bash
while true; do /path/to/script.sh; done

每日杀戮后重新启动

  1. Kill 脚本会重新启动上述包装器脚本。
  2. 以不同用户身份运行的脚本会定期检查该脚本是否仍在运行,并在必要时重新启动它。不过,如果不是由 root 运行的话,这确实需要sudo/或 SUID 二进制文件。su

相关内容