写一个后台进程来检查进程是否仍然有效

时间:2010-06-30 12:32:06

标签: unix shell cron

在UNIX中,我有一个实用程序,比如'Test_Ex',一个二进制文件。如何编写一个总是在后台运行的作业或shell脚本(作为cron作业),它会一直检查'Test_Ex'是否仍然每5秒运行一次(并且可能隐藏此作业)。如果它正在运行,则什么都不做。如果没有,删除指定路径的目录。

3 个答案:

答案 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只是浪费资源。