2017-06-19 25 views
0

私は自分のPCのターミナルで私のサーバ接続を閉じても、そのサーバ上で稼動し続けているような別のサーバ上で動作するpythonスクリプトを書こうとしています。無限にWebサイト(UI)のイベントを聴いて無限に実行され、イベント発生時に特定のドッカーを適切に起動し、PosgreSQLイベントを聴き続けます。バックグラウンドでPythonスクリプトを実行

nohup(バックグラウンドでスクリプトを実行する)を使用しようとしたとき、バックグラウンドで実行されましたが、いずれのイベントも聞くことができませんでした。誰かがこれまでに似たようなことをしていますか?あなたの考えを共有してください。 私は自分のスクリプトの一部を共有しています。

self.pool = await asyncpg.create_pool(user='alg_user',password='algy',database='alg',host='brain',port=6543) 
     async with self.pool.acquire() as conn: 
      def enqueue_listener(*args): 
       self.queue.put_nowait(args) 

      await conn.add_listener('task_created', enqueue_listener) 
      print("Added the listener") 
      while True: 
       print("---- Listening for new job ----") 
       conn2, pid, channel, payload = await self.queue.get() 
       x = re.sub("[^\w]", " ", payload).split() 
       print(x) 
       if x[5] == '1': 
        tsk = 'TASK_ID=%s' % str(x[1]) 
        if x[3] == '1': 
         command = "docker run --rm -it -e ALGORITHM_ID=1 -e TASK_ID=%s --network project_default project/docked_prol:1.0" % (str(x[1])) 
         subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) 

        if x[3] == '8': 
         command = "docker run --rm -it -e ALGORITHM_ID=8 -e TASK_ID=%s --network project_default project/docked_pro:1.0" % (str(x[1])) 
         subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) 

手作業で実行してもスクリプトは正常に動作しますが、実装方法についてアドバイスが必要です。

+1

スクリーンセッション内で起動してみますか?そして、プロセスをバックグラウンドで実行していて、プロセスを中断していないことを確認していますか? – wmorrell

+0

私は 'nohup'コマンドを使用して(https://stackoverflow.com/questions/2975624/how-to-run-a-python-script-in-the-background-even-after-i-logout- ssh)。私はこれを参考にしました。 –

答えて

0

nohupを使用してバックグラウンドで何かを実行するのは、プロセス/スクリプトが外部入力を提供せずに自動的に実行される場合のみです。バックグラウンドプロセスに手動入力を提供する方法がないためです。 まず、プロセスがまだバックグラウンドで実行されているかどうかを確認してください(ps -fe | grep processname)。

実行中の場合は、 'nohup.out'ファイルをチェックして、プロセスが停止している場所を確認してください。これは、プロセスを開始したのと同じディレクトリに生成されます。これは、プロセスの内部で何が起こっているか、あなたにいくつかの考えを与えるでしょう。

+0

私は上記のように私の質問では、バックグラウンドで実行されますが、PosgreSQLのイベントを聞いていないときには、私も機能としてしたいと述べた。 –

関連する問題