对于crontab * * * * * 的,十分有必要。防止重复调用。
这里的进程名是指脚本的完整路径,需能ps到。
加在每个程序的开头。
方法一:不影响原先的程序,本次退出执行。
import sys,commands
if int(commands.getoutput("ps -ef |grep '"+sys.argv[0]+"' |grep -v grep |wc -l"))>1:
print "PASS"
sys.exit(0)
else:
print "OK"
或者:
方法二:杀掉所有的同名进程,包括本次。
##===========================================================================
import os,commands,sys
scriptname=os.path.abspath(sys.argv[0])
RUNNINGSCRIPTCOUNT =commands.getoutput("ps -ef|grep -v grep |grep %s |wc -l "%scriptname)
if int(RUNNINGSCRIPTCOUNT)>1:
print "已有同名进程运行,杀死所有同名进程。"
### linux awk '{print $2}'
commands.getoutput("ps -ef|grep -v grep |grep %s |awk '{print $2}' |xargs kill -9 "%scriptname)
print "exit 0"
sys.exit(0)
##=============================================================================
方法三: 只杀掉原有进程,保证本次的运行。
先拿到本次进程号,再杀掉其他同名进程号。