在 Screen 内的 Python 脚本 运行 中查找错误
Find error in Python script running inside Screen
我写了一个 python 脚本,它使用循环无限运行。该脚本在屏幕会话中启动。但是有时,在几个小时甚至几天后,它会因为我现在不知道的原因而崩溃,因为屏幕会话会在发生这种情况时关闭。
我还使用以下代码创建了一个 "watchdog" 脚本,该脚本也在屏幕会话中运行:
from subprocess import check_output
import os
import time
import random
time.sleep(20)
def screen_present(name):
try:
var = check_output(["screen -ls; true"],shell=True)
if "."+name+"\t(" in var:
print name+" is running"
else:
print name+" is not running"
print "RESTARTING"
os.system("screen -dmS player python /var/www/updater.py > /dev/null 2> /dev/null & echo $")
except:
return true
while True:
screen_present("updater")
time.sleep(random.uniform(6, 10))
因此,当我离开脚本 运行 一个晚上左右后检查脚本时,我有时会发现,
- 带有原始代码的屏幕会话已经不存在了,
因为我的脚本一定抛出了异常,但我找不到
哪个修复它
- 我的看门狗的屏幕会话被标记为 "dead"
你们会怎么做才能找到错误并保证稳定运行?
启动 python 进程时,将其输出到文件。像这样:
python myfile.py >> log.txt 2>&1
您将能够访问该文件,即使它已死。
我写了一个 python 脚本,它使用循环无限运行。该脚本在屏幕会话中启动。但是有时,在几个小时甚至几天后,它会因为我现在不知道的原因而崩溃,因为屏幕会话会在发生这种情况时关闭。
我还使用以下代码创建了一个 "watchdog" 脚本,该脚本也在屏幕会话中运行:
from subprocess import check_output
import os
import time
import random
time.sleep(20)
def screen_present(name):
try:
var = check_output(["screen -ls; true"],shell=True)
if "."+name+"\t(" in var:
print name+" is running"
else:
print name+" is not running"
print "RESTARTING"
os.system("screen -dmS player python /var/www/updater.py > /dev/null 2> /dev/null & echo $")
except:
return true
while True:
screen_present("updater")
time.sleep(random.uniform(6, 10))
因此,当我离开脚本 运行 一个晚上左右后检查脚本时,我有时会发现,
- 带有原始代码的屏幕会话已经不存在了, 因为我的脚本一定抛出了异常,但我找不到 哪个修复它
- 我的看门狗的屏幕会话被标记为 "dead"
你们会怎么做才能找到错误并保证稳定运行?
启动 python 进程时,将其输出到文件。像这样:
python myfile.py >> log.txt 2>&1
您将能够访问该文件,即使它已死。