2010-06-30 75 views
1

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

回答

2

试试这个脚本:

pgrep Test_Ex > /dev/null || rm -r dir 

如果没有pgrep,使用

ps -e -ocomm | grep Test_Ex || ... 

代替。

+0

谢谢..程序是编辑crontab并添加这一行。这个手动任务可以使用shell脚本作为安装过程的一部分来完成吗? – Abhishek 2010-06-30 13:34:28

+0

@Abhi:是的,只需将该行放入脚本文件即可。该文件的第一行应该是'#!/ bin/sh',并且'pgrep ...'命令行应该像'while:做pgrep ...;睡5次;完成“,然后在后台运行脚本:'scriptname&'。您可能需要保存PID,以便在某个时候可以杀死它。 – 2010-06-30 15:18:33

2

upstart这样的工具,我认为最初是Ubuntu linux发行版的一部分,对于监视正在运行的任务很有用。

2

做到这一点的最好方法就是不要这样做。

 
#!/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经常是一个坏主意,并试图对其进行监控:如果你想知道,如果Test_Ex仍在运行,然后从脚本,看起来像启动来自cron是一个可怕的,可怕的想法。看来crond总是在运行,但你不能再依赖于这个想法,而不是依靠包装器脚本保持活力;任何一个人都可以随时被杀死。每10秒唤醒一次查询ps只是浪费资源。