检测进程是否已在ubuntu中停止

时间:2012-08-30 17:55:56

标签: ubuntu process daemon

我的服务器上运行了守护程序。它已经运行了一段时间,并且我一直记录守护进程中每次出现的事件。

昨天我发现了一些奇怪的事。守护程序已停止运行,但日志中没有错误条目。

对于我的系统来说,这个守护进程一直在运行非常重要,如果它因任何原因而被停止,它将被重新启动。

有没有一种方法可以定期检测Ubuntu中是否有特定进程正在运行?如果我能够检测到我可以轻松地重新启动它,但检测是主要问题

2 个答案:

答案 0 :(得分:3)

使用cron。

让它每x分钟运行一次脚本

脚本中的

使用类似

的行
ps aux | grep -c <your process/daemon name>

并检查输出。

这将始终返回至少一个(检查进程本身的过程) 所以,如果你的计数大于1,你可以假设你的进程正在运行而什么都不做,否则重启守护进程。

https://help.ubuntu.com/community/CronHowto

如果您的流程需要由特定用户(例如wwwrun)运行,请确保以该用户身份启动流程

答案 1 :(得分:2)

如果程序没有自动从控制台分离(即继续在前台运行),你可以这样做:

while /bin/true; do
  /PATH/TO/YOUR/daemon
  logger -p local0.warn "daemon crashed"
done

这将记录警告并重新生成守护进程。否则你可能需要运行看门狗:

PID=`cat /var/run/daemon.pid`
if [ -z `ps hp $PID` ]; then
  logger -p local0.warn "daemon crashed"
fi

if [ -z `ps ax | grep [d]aemon` ]; then
  logger -p local0.warn "daemon crashed"
fi

或者在第一个例子中的循环中,或者通过Loopo建议的cron。

最后一个示例中守护程序名称第一个字母周围的方括号阻止grep进程显示在输出中。