【发布时间】: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 目前很差..