我有一个 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。