![如果脚本在不使用 crontab 的情况下停止,则重新启动该脚本](https://linux22.com/image/135777/%E5%A6%82%E6%9E%9C%E8%84%9A%E6%9C%AC%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%20crontab%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%81%9C%E6%AD%A2%EF%BC%8C%E5%88%99%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E8%AF%A5%E8%84%9A%E6%9C%AC.png)
我使用 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
每日杀戮后重新启动
- Kill 脚本会重新启动上述包装器脚本。
- 以不同用户身份运行的脚本会定期检查该脚本是否仍在运行,并在必要时重新启动它。不过,如果不是由 root 运行的话,这确实需要
sudo
/或 SUID 二进制文件。su