web-dev-qa-db-ja.com

Linuxのバックグラウンドでpythonアプリを実行する

ここで奇妙な質問ですが、私はLinuxサーバーでpythonチャットサーバー/クライアントコンボを使用しています。現在、これを行うと、

$: cd /path/to/chat/server
$: Sudo python ChatServer_Listen.py

これにより、pythonアプリ実行ループが開始され、サーバーは着信TCP接続をリッスンします。

私の問題は、ターミナルウィンドウを閉じると、sshセッションが終了してpythonアプリが実行を停止し、クライアントが接続できなくなることです。ターミナルインスタンスを24時間年中無休で実行したくありません。ローカルでこのpythonアプリをLinuxのバックグラウンドで実行できるものとして設定できますか?その場合、どのように設定しますか?理想的には、サービスとして実行されるApacheのようなものです。

助けてくれてありがとう!

5
Justin

Nohup python ChatServer_Listen.py &を使用できます

Nohupは、プログラムの出力をNohup.outファイルに記録します。

プログラムを停止するには、kill your_pidコマンドを使用する必要があります。

8

これを行う正しい方法は、プロセスを正しくデーモン化するようにコードを変更することです。これを行う1つの方法は、daeminizeモジュールを使用することです。

これを行う適切な方法は、変更できないソフトウェアでも機能し、次のように開始することです

Nohup python ChatServer_Listen.py >logfile.txt 2>&1 </dev/null &

Sudoを使用していないことに注意してください。これは、上記の行をシェルスクリプトに入れ、Sudoを使用してシェルスクリプトを実行する必要があるためです。

1
Michael Dillon

Supervisor を使用します。これはまさにこの目的のために作られています。加えて、プロセスが停止した場合にプロセスを再起動したり、それを制御するためのWebベースのGUIを提供したりします.

1
jamieb

ログオフ後もプロセスを存続させる簡単な方法は、 screen を使用することです。

1
AnonymousLurker

ここで説明したように:

https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-Nohup

Bashのジョブコントロールを使用して、プロセスをバックグラウンドに送信します。

[crtl] + z

bg

また、Sam/Janが述べたように、ターミナルを閉じた後にプロセスが強制終了されないように、disownを実行する必要があります。

disown -h

1
denizeren