2012-09-01 15 views
7

私はマシン上で一度だけ実行することを許可したいpythonスクリプトを持っています。バックグラウンドで実行されているのか、別のsshセッションで実行されているのかなど、すでに実行中の場合は、 "Error、already running"のようなものを印刷します。どうすればいい?ここに私のスクリプトです。pythonスクリプトのインスタンスを1つだけ許可しますか?

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 

P.S私はCentOS 5を使用しています。

答えて

3
  1. ファイルにロックを実装できます。
  2. 実行の開始時に一時ファイルを作成し、スクリプトを実行する前にそのファイルが存在するかどうかを確認します。

あなたが例えば使用して、既存のファイルをロックすることができanswer- Check to see if python script is running

+0

あなたはこのようなあなたのスクリプトでそれを呼び出すことができます。 – icktoofay

+1

チップをありがとう。 – fatrock92

+0

それは、スクリプトは無限ループなので、ロックが解除されたスクリプトの最後には到達しません。 –

0

のために、この記事を参照してください。あなたのスクリプトの開始時にflock。同じスクリプトを2回実行すると、最新の開始スクリプトがブロックされます。 this questionも参照してください。

+0

それは、スクリプトは無限ループなので、ロックが解除されたスクリプトの最後まで到達することはありません。 –

+0

ループ条件として使用されるflegをクリアする 'SIGTERM'または' SIGQUIT'のハンドラを追加することができます。 –

+0

これを行う方法とその意味を私に説明できますか?私がPythonを初めて使用しているので、 –

2

pip install singleでパッケージをインストールできます。このパッケージでは、アドバイザリロックを使用して、コマンドの1つのインスタンスだけが無効なロックファイルを残さずに実行されるようにします。あなただけのリンクを投稿するつもりなら、あなたは同様にそれから少し引用したい場合があり

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

PIPコマンドが見つかりません。私はcentosでこれをどのようにしますか? yumのパッケージはありません –

+0

まず 'sudo easy_install pip'を実行する必要があるかもしれません。それから、pipは自動的にここから単一のパッケージをダウンロードします:http://pypi.python.org/pypi/single/ – aculich

+0

pipをインストールした後にpip install singleを実行すると、http://pastebin.com/6MTmHkMT –

関連する問題