使用 crontab 监视进程并在不运行时重新启动

使用 crontab 监视进程并在不运行时重新启动

我有一个 Python / JS 服务器组合,我需要始终保持运行。 Python 服务器很容易崩溃,因为它运行在具有 1GB RAM 的服务器上。

我编写了一个名为“monitor.sh”的脚本,该脚本在 crontab 中设置为每分钟运行一次,但每当它尝试重新启动 python 服务器时,它似乎都会失败。

我知道它正在运行,我可以通过每次运行时留下的时间戳来验证它是否正在运行。

监视器.sh

#!/bin/bash
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/www/site.com

echo "CHECKING" >> /var/www/site.com/monitor.log

pidof python3 >/dev/null
if [ $? -ne 0 ] ; then
  echo "Restarting Python App:  $(date)" >> /var/www/site.com/monitor.log
  screen -dmS python_server python3 /var/www/site.com/app.py
fi

pidof nodejs >/dev/null
if [ $? -ne 0 ] ; then
  echo "Restarting Inferno Server:  $(date)" >> /var/www/site.com/monitor.log
  screen -dmS inferno_server nodejs /var/www/site.com/render_server.js
fi

定时任务--(crontab -e典型用户下)

* * * * * /var/www/site.com/monitor.sh

我会在日志中看到“Restarting Python App”,然后什么也不会发生。尝试记录输出不会> out.txt 2> errors.txt产生任何结果。

到目前为止还没有起作用的事情:

  • 使用系统级 crontab
  • 使用 sudo 运行服务器
  • chmod +x对所有文件使用
  • chmod -R 755对所有文件使用
  • /usr/bin/python3直接致电
  • os.chdir()在 python 脚本中使用

有效的事情:

  • 手动运行应用程序
  • 手动运行脚本
  • 使用任何其他 Python 文件运行脚本
  • 根据需要监视并重新调用其他 JS 服务器

服务器是一个使用 Gunicorn 的 Bottle.py 实例。

有什么办法可以让我知道这里到底发生了什么吗?我可以检查的日志文件,或者实际从该命令中获取错误的方法?

答案1

我知道这不是您要问的,但您的方法似乎太棘手了。我什至不确定屏幕是否应该在脚本中工作,而且我现在没有电脑来测试它

我强烈建议你使用supervisord来监控和重启服务。

答案2

我建议使用 Upstart 或 Systemd。根据您的发行版的版本,Ubuntu/Debian/CentOS 会预安装它们。更老的系统会有 System V。

相关内容