【问题标题】: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 目前很差..

标签: linux bash process


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 2010-10-16
    • 2014-10-31
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多