此
#!/bin/bash
if [ `ps -ef | grep "91.34.124.35" | grep -v grep | wc -l` -eq 0 ]; then sh home/asfd.sh; fi
还是这个?
ps -ef | grep "91\.34\.124\.35" | grep -v grep > /dev/null
if [ "$?" -ne "0" ]
then
sh home/asfd.sh
else
echo "Process is running fine"
fi
您好,如何编写一个查看正在运行的进程的shell脚本,如果没有进程名称 CONTAINING 91.34.124.35,那么在某个地方执行一个文件,我想制作一个这个连续循环每30秒运行一次,我认为有一个睡眠命令。
答案 0 :(得分:3)
你不能使用cron因为在实现中我知道最小的单位是一分钟。你可以使用sleep但是你的进程总是在运行(每次都会启动cron。)
仅使用睡眠
while true ; do
if ! pgrep -f '91\.34\.124\.35' > /dev/null ; then
sh /home/asfd.sh
fi
sleep 30
done
如果您的pgrep
有选项-q
来抑制输出(与BSD一样),您也可以使用pgrep -q
而不将输出重定向到/dev/null
答案 1 :(得分:1)
首先,您应该能够将脚本简化为
if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi
要通过cron每30秒运行一次(因为cron每分钟只运行一次),你需要2个条目 - 一个用于运行命令,另一个用于延迟30秒再次运行相同的命令。例如:
* * * * * root if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi
* * * * * root sleep 30; if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi
为了使这个更清洁,您可能首先将命令存储在变量中并将其用于两个条目。 (我没有测试过这个)。
CHECK_COMMAND="if ! pgrep '91\.34\.124\.35' > /dev/null; then ./your_script.sh; fi"
* * * * * root eval "$CHECK_COMMAND"
* * * * * root sleep 30; eval "$CHECK_COMMAND"
p.s。以上假设您将其添加到/etc/crontab
。要在用户的crontab(crontab -e
)中使用它,只需在命令前省略用户名(root
)。
答案 2 :(得分:1)
我建议使用watch
:
watch -n 30 launch_my_script_if_process_is_dead.sh
答案 3 :(得分:0)
使用cron进行“每30秒循环”部分。
答案 4 :(得分:0)
无论哪种方式都可以,您可以将其保存在.sh文件中并将其添加到crontab以每30秒运行一次。如果您想知道如何使用crontab,请告诉我。
答案 5 :(得分:0)
试试这个:
if ps -ef | grep "91\.34\.124\.35" | grep -v grep > /dev/null
then
sh home/asfd.sh
else
echo "Process is running fine"
fi
无需使用test
。 if
本身将检查退出代码。
答案 6 :(得分:0)
您可以将脚本保存在文件名myscript.sh
中然后你可以通过cron运行你的脚本,
*/30 * * * * /full/path/for/myscript.sh
或者您可以使用
# cat script1.sh
#!/bin/bash
while true; do /bin/sh /full/path/for/myscript.sh ; sleep 30; done &
# ./script1.sh
感谢。
答案 7 :(得分:0)
我发现非常有效的deamonizing关键脚本。
http://cr.yp.to/daemontools.html