我的服务器上运行了一个守护进程。它运行平稳一段时间,并且我在守护进程中记录事件的每一次发生。检测一个进程是否已在ubuntu中停止
昨天我注意到一些奇怪的东西。守护进程已停止运行,但日志中没有错误条目。
对于我的系统来说,这个守护进程保持运行非常重要,并且如果它由于任何原因而停止,它将被重新启动。
有没有一种方法可以定期检测某个特定进程是否正在运行或在Ubuntu中运行?如果我能检测到我可以轻松地重新启动它,但检测是主要问题
我的服务器上运行了一个守护进程。它运行平稳一段时间,并且我在守护进程中记录事件的每一次发生。检测一个进程是否已在ubuntu中停止
昨天我注意到一些奇怪的东西。守护进程已停止运行,但日志中没有错误条目。
对于我的系统来说,这个守护进程保持运行非常重要,并且如果它由于任何原因而停止,它将被重新启动。
有没有一种方法可以定期检测某个特定进程是否正在运行或在Ubuntu中运行?如果我能检测到我可以轻松地重新启动它,但检测是主要问题
使用cron。
让它运行一个脚本每隔x分钟
在脚本中使用的线类似
ps aux | grep -c <your process/daemon name>
并检查输出。
这将始终返回至少一个 所以也许,如果你的计数大于1,你可以假设你的进程正在运行,什么也不做(检查过程本身的过程中),否则重新启动守护进程。
https://help.ubuntu.com/community/CronHowto
,如果你的程序需要由特定用户(例如,wwwrun),请确保您启动该进程为用户
如果程序不autmatically从控制台脱离运行(即保持在前台运行),你可以做这样的事情:
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
无论是在环路中的第一个例子,或通过cron由Loopo建议。
最后一个示例中守护进程名称第一个字母的方括号可防止在输出中显示grep进程。
感谢您的回复@Loopo。我会使用这个,但是正如其他人试图使用它的注释一样,其他命令中的grep进程本身也会作为响应之一返回。因此,如果该进程正在运行计数2。 –