如果找不到则检查进程并重新启动程序的脚本[重复]
Posted
技术标签:
【中文标题】如果找不到则检查进程并重新启动程序的脚本[重复]【英文标题】:Script to check for process & restart program if not found [duplicate] 【发布时间】:2016-09-26 21:35:15 【问题描述】:我正在使用这个检查脚本来查看一个名为 CCcam 的包是否正在运行,如果没有运行则重新启动它..
#!/bin/sh
process=`ps auxwww | grep CCcam | grep -v grep | awk 'print $1'`
if [ -z "$process" ]; then
echo "Couldn't find CCcam running. Restarting server-binary" >> /var/cccamlog/cccam.check
echo && date >>/var/cccamlog/cccam.check
/usr/local/bin/CCcam -d >> /var/cccamlog/CCcam.log &
else echo "CCcam is still OK!" >> /var/cccamlog/cccam.check
fi
脚本报告“CCcam 仍然正常!”
但它没有运行,如果我使用这个命令搜索进程:
ps x |grep -v grep |grep -c CCcam
,我得到 0,所以我知道进程没有运行。
是否还有其他我应该考虑的因素可能会使检查脚本误以为 CCcam 正在运行?例如,在程序崩溃/停止后是否会留下某种类型的标签,而脚本正在接受这些标签?
从另一个测试我得到.. 错误:CCcam 仍然使用 pid 运行:
【问题讨论】:
你可以用 grep 搜索grep [C]Ccam
而不是 grep -v grep
。此表达式不会匹配自身。
更好,pgrep CCcam
好的,我会同时尝试它们。从我得到的另一个测试脚本中......
当你打开 shell 调试功能时,调试你的代码正在做的事情要容易得多。 set -x
将向您显示每一行替换变量的值。 set -vx
有点冗长,但可能会令人困惑(与set -x
不同的方式;-)。我想如果你使用调试,你会看到一些不应该存在的东西被设置到 $process 中。此外,awk 可以匹配模式,因此取出所有 grep 并使用 | awk '/[C]Ccam/print $1'
。祝你好运。
对不起,伙计们,但我不知道如何在我的脚本中实现你给我的答案,我的 linux 目前很差..
【参考方案1】:
在这种情况下,您也可以使用pgrep
。它在 proc 表中查找进程名称 CCCam。
if [[ $(pgrep CCCam) ]]; then
echo "CCCam is running";
else
echo "Not Running, so I must do something";
# DO something ....
fi
【讨论】:
这个答案太好了,我现在得了糖尿病。【参考方案2】:if pidof -s CCCam > /dev/null; then
echo 'It is already running!'
else
echo 'process not found...'
fi
【讨论】:
以上是关于如果找不到则检查进程并重新启动程序的脚本[重复]的主要内容,如果未能解决你的问题,请参考以下文章
linux下httpd进程cup 100% kill了进程还是自动重启,/proc/pid/exe也找不到该进程的执行文件