![如何编写一个 crontab 脚本来检查进程的状态并在未运行时启动它?](https://linux22.com/image/98535/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AA%20crontab%20%E8%84%9A%E6%9C%AC%E6%9D%A5%E6%A3%80%E6%9F%A5%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81%E5%B9%B6%E5%9C%A8%E6%9C%AA%E8%BF%90%E8%A1%8C%E6%97%B6%E5%90%AF%E5%8A%A8%E5%AE%83%EF%BC%9F.png)
qBittorrent-nox 直到上周都运行得很好,但从那以后它总是在我的 Ubuntu 14.04 上崩溃。理论上它是日志记录,但日志文件仅包含这些行:
******** 信息 ******** qBittorrent vezérléséhez, nyisd meg ezt a címet: 本地主机:8080 Web UI 管理员 不需要: admin Web UI 管理员 jelszó még az alapértelmezett: adminadmin Ez biztonsági kockázatot jelent。 Kérlek változtass jelszót 程序是最好的。 ******** 信息 ******** qBittorrent vezérléséhez, nyisd meg ezt a címet: 本地主机:8080 Web UI 管理员 felhasználó neve: weylyn1 ******** 信息 ******** qBittorrent vezérléséhez, nyisd meg ezt a címet: 本地主机:8080 Web UI 管理员 felhasználó neve: weylyn1 ******** 信息 ******** qBittorrent vezérléséhez, nyisd meg ezt a címet: 本地主机:8080 Web UI 管理员 felhasználó neve: weylyn1。所以我想编写一个脚本,每 5 分钟检查一次 qbittorrent-nox 是否正在运行,如果没有运行,则以
# service qbittorrent-nox start
root 身份启动它。但是,如果它正在运行,请再等待 5 分钟并再次检查。我想使用此解决方法,直到找到崩溃的解决方案。
答案1
如何测试守护进程是否正在运行?这取决于。某些守护进程有一个进程 ID 为 的文件/var/run/foo.pid
。一个例子是/var/run/crond.pid
。
$ cat /var/run/crond.pid
432
如果进程正在运行,它有一个目录/proc
:
$ ls /proc/$(cat /var/run/crond.pid)
因此,如果 /proc 中的目录不存在,我们可以重新启动。如果 qBittorrent 有这个 pid 文件,你可以这样做:
# cat <<EOF >/etc/cron.d/restart-qbittorrent-nox
*/5 * * * * /bin/test -e /proc/$(cat /var/run/qbittorrent-nox.pid)/cmdline || service qbittorrent-nox start
EOF
如果您没有任何文件,则/var/run
必须使用它ps ax | grep qBittorrent
来查找该进程。
但最好的解决方案是找出进程崩溃的原因......