3

我的服务器上运行了一个守护进程。它已经顺利运行了一段时间,我一直在守护进程中记录每一个事件的发生。

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

对于我的系统来说,这个守护进程保持运行非常重要,如果它因任何原因停止,它会重新启动。

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

4

2 回答 2

3

使用 cron。

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

在您的脚本中使用类似的行

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

并检查输出。

这将始终返回至少一个(检查进程本身的过程),因此如果您的计数大于 1,您可以假设您的进程正在运行并且什么也不做,否则重新启动守护程序。

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

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

于 2012-08-30T18:15:06.460 回答
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 进程显示在输出中。

于 2012-08-30T18:24:36.507 回答