私は自分の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)
手作業で実行してもスクリプトは正常に動作しますが、実装方法についてアドバイスが必要です。
スクリーンセッション内で起動してみますか?そして、プロセスをバックグラウンドで実行していて、プロセスを中断していないことを確認していますか? – wmorrell
私は 'nohup'コマンドを使用して(https://stackoverflow.com/questions/2975624/how-to-run-a-python-script-in-the-background-even-after-i-logout- ssh)。私はこれを参考にしました。 –