我使用 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