![如何找出 Python 脚本在后台停止运行的原因?](https://linux22.com/image/661972/%E5%A6%82%E4%BD%95%E6%89%BE%E5%87%BA%20Python%20%E8%84%9A%E6%9C%AC%E5%9C%A8%E5%90%8E%E5%8F%B0%E5%81%9C%E6%AD%A2%E8%BF%90%E8%A1%8C%E7%9A%84%E5%8E%9F%E5%9B%A0%EF%BC%9F.png)
几天前我买了一台 VDS 服务器,就是为了让一些 Telegram 机器人全天候工作。
我无法让 shell 一直打开,所以我决定使用这个“黑客”:
1. 在 Python 脚本中添加#!/usr/bin/python3.4
2。
sudo chmod u+x mybot.py sudo nohup ./mybot.py &
脚本成功启动并正常工作,但是,在 8-10 小时后它最终会停止响应!ps -aux
不过我在输出中看到了它。
为了确定这是 VDS 的问题,我在我的 ODroid-C1 微型计算机上启动了机器人一天。没有发现任何问题,两个脚本都正常工作。
主要问题是我无法弄清楚为什么 VDS 上的这些机器人会停止响应。有什么方法可以找出原因吗?
PS ODroid 和 VDS 都安装了 Ubuntu 14.04。
答案1
您可以尝试另外两种方法:
第一种方式,使用屏幕:
sudo apt-get install screen
然后启动屏幕运行相同的命令,并在没有 nohup 的情况下在“屏幕”中运行脚本。
sudo ./mybot.py
Ctrl+A Ctrl+D 可从屏幕分离,断开与 ssh 会话的连接。下次当您看到应用程序挂起时,请输入
screen -r
附加到正在运行 Python 应用程序的屏幕会话
第二 - 从脚本的标准输出和标准错误重定向到日志文件
sudo nohup ./mybot.py >> /var/log/mybot_out.log 2>>/var/log/mybot_err.log &
或放入单个文件:
sudo nohup ./mybot.py >> /var/log/mybot_out.log 2>>&1 &
然后在下次挂断后调查日志文件。
编辑:如果在应用程序挂起时您无法从 stdout、stderr 看到任何有用的输出 - 安装 strace,并将其附加到脚本的进程中:
strace -p <PID>
也许您可以从中找到一些有用的东西。如果它没有显示任何有用的信息(再次) - 从 strace 重新启动应用程序。
... strace ./mybot.py
如果有足够的可用空间,最好将输出输出到日志文件。然后调查最后几千行日志(可能包含许多重复项)