8

我有一个 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

PS 如果这很重要,我正在使用 CentOS 5。

4

3 回答 3

3
  1. 您可以对文件实施锁定。
  2. 在执行开始时创建一个临时文件,并在运行脚本之前检查该文件是否存在。

请参阅此帖子以获取答案- 检查 python 脚本是否正在运行

于 2012-09-01T21:57:35.930 回答
3

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

您可以像这样在脚本上调用它:

single.py -c long-running-script arg1 arg2
于 2012-09-02T23:00:01.977 回答
0

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

于 2012-09-01T22:06:18.797 回答