汗,近期需要运行一个python程序,但是受限于网络环境等具体因素,会偶尔中断崩溃。
希望在程序中断运行之后,自动重新启动,所以采用的是crontab机制:
*/5 * * * * python3 /test.py > /test.log
上述命令表示每五分钟执行一次 python3 /test.py > test.log 命令。但是与此同时,也不希望同时运行两个python3 /test.py命令。因此需要在源代码里面进行判断:
import psutil
import sys
import os
def checkProcess(processName):
ps1=psutil.pids()
curps=os.getpid()
print("current pid = "+str(curps))
for pid in ps1:
cmdline=str(psutil.Process(pid).cmdline())
print(cmdline)
if cmdline.find(processName)>=0:
if pid!=curps and pid!=(curps-1):
print("This is the second process "+str(pid))
return 1
return 0
if checkProcess("/test.py")==1:
print("There is a process for test.py")
sys.exit(0)
需要注意的是:
if pid!=curps and pid!=(curps-1): 一开始采用的是
if pid!=curps :
结果总是自动退出。后来发现,采用crontab 方式启动,会显示两条:
/bin/bash -c python3 test.py
python3 test.py
因此需要修改上述语句。
至此已经达到了目标。ok