只允许一个python脚本实例?

时间:2012-09-01 21:54:12

标签: python linux locking singleton centos

我有一个python脚本,我只想让它在机器上运行一次。我希望它打印像“错误,已经运行”的东西,如果它已经在运行,无论是在后台运行还是在不同的ssh会话中运行。我该怎么做?这是我的剧本。

import urllib, urllib2, sys
num = sys.argv[1]
print 'Calling'
phones = [
'http://phone1/index.htm',
'http://phone2/index.htm',
'https://phone3/index.htm',
'https://phone4/index.htm',
'https://phone5/index.htm'
]
data = urllib.urlencode({"NUMBER":num, "DIAL":"Dial", "active_line":1})
while 1: 
    for phone in phones:
        try:
            urllib2.urlopen(phone,data) # make call
            urllib2.urlopen(phone+"?dialeddel=0") # clear logs
        except: pass

如果重要的话,我正在使用CentOS 5.

3 个答案:

答案 0 :(得分:3)

  1. 您可以对文件实施锁定。
  2. 在执行开始时创建临时文件,并在运行脚本之前检查该文件是否存在。
  3. 请参阅此帖子以获取答案 - Check to see if python script is running

答案 1 :(得分:2)

您可以使用pip install single安装single软件包,该软件包将使用建议锁定,以确保只运行一个命令实例,而不会留下陈旧的锁定文件。

您可以在脚本上调用它:

single.py -c long-running-script arg1 arg2

答案 2 :(得分:0)

您可以使用例如锁定现有文件在您的脚本开始时flock。然后,如果相同的脚本运行两次,则最新启动将阻止。另请参阅this question