如何编写一个 crontab 脚本来检查进程的状态并在未运行时启动它?

如何编写一个 crontab 脚本来检查进程的状态并在未运行时启动它?

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 startroot 身份启动它。但是,如果它正在运行,请再等待 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来查找该进程。

但最好的解决方案是找出进程崩溃的原因......

相关内容