2017-04-24 61 views
0

我创建了一个脚本来检查是否有其他脚本正在运行。 如果脚本卡住某些情况下我想重新启动脚本。在python中退出脚本时结束子流程

这里是我的代码

import os 
import subprocess 
from subprocess import call 
import datetime 
import time 
from time import ctime 

statinfo = os.stat('nemo_logs/nemo_log_file_' + time.strftime('%Y-%m-%d') + '.txt') 
for i in range(1): 
    first_size = statinfo.st_size 
    time.sleep(10) 
    if statinfo.st_size > first_size: 
     print("SCRIPT IS RUNNING") 
    else: 
     print("SCRIPT IS NOT RUNNING. TRYING TO KILL THE SCRIPT...") 
     os.system("pkill -9 -f selenium_nemo.py") 
     print("SCRIPT KILLED. TRYING TO RESTART THE SCRIPT...") 
     subprocess.call("python /root/btree/selenium_nemo.py", shell=True) 
     print("SCRIPT STARTED") 

当我打电话的subprocess.call脚本strarts但其“ckeck”脚本内部执行。如果我停止执行检查脚本,子进程结束。检查脚本在crontab上,我想要在启动脚本后坚持退出检查脚本。 我怎么能做到这一点? 感谢

+1

不知道这是否是您的主要问题,但存储在'statinfo'中的值是一个不会奇迹般更新的元组。等待10秒后,您必须再次调用'os.stat()'。 – lenz

+0

嗨@lenz,statinfo工作正常。我可以获得文本的第一个大小,然后重新检查它。这个脚本还在开发中。我稍后要对脚本进行一些更改,但这是我现在的主要问题 –

+1

我只是说你的if语句永远不会是真的,因为即使if语句中的statinfo.st_size也不会改变,文件的大小发生变化。你也可以写'如果假:' – lenz

回答

1

不是直接调用python /root/btree/selenium_nemo.py的,你可以调用nohup python /root/btree/selenium_nemo.py &。这会将你的新进程与调用进程分离开来,所以它可以在停止你的python脚本时生存下来。

+0

嗨,基督教,我得到这个。 SCRIPT KILLED。尝试重新开始脚本... nohup:忽略输入并将输出追加到'nohup.out'。该脚本成功启动,但是当我终止cron脚本时,另一个脚本停止工作 –

+0

我检查了服务器进程上的olso并且它不存在... –

+0

您是否检查脚本是否成功重新启动?它是否在你终止cron脚本之前运行? –