在UNIX中,我有一个实用程序,比如'Test_Ex',一个二进制文件。如何编写一个总是在后台运行的作业或shell脚本(作为cron作业),它会一直检查'Test_Ex'是否仍然每5秒运行一次(并且可能隐藏此作业)。如果它正在运行,则什么都不做。如果没有,删除指定路径的目录。
答案 0 :(得分:2)
试试这个脚本:
pgrep Test_Ex > /dev/null || rm -r dir
如果您没有pgrep
,请使用
ps -e -ocomm | grep Test_Ex || ...
代替。
答案 1 :(得分:2)
像upstart这样的实用程序,最初是我认为的Ubuntu linux发行版的一部分,适用于监视正在运行的任务。
答案 2 :(得分:2)
这样做的最好方法是不要这样做。如果您想知道Test_Ex是否仍在运行,请从类似以下内容的脚本启动它:
#!/bin/sh Test_Ex logger "Test_Ex died" rm /p/a/t/h
或
#!/bin/sh while ! Test_ex do logger "Test_Ex terminated unsuccesfully, restarting in 5 seconds" sleep 5 done
定期查询ps是一个坏主意,并试图从cron监视它是一个可怕的,可怕的想法。在crond将永远运行的想法中似乎有一些安慰,但你不能再依赖它了,而不是依赖于保持活着的包装脚本;任何一个人都可以随时被杀死。每10秒唤醒一次查询ps只是浪费资源。