web-dev-qa-db-ja.com

sshセッションからログオフした後でもpythonプログラムを実行し続ける

pythonというscrape.pyというスクリプト。名前が示すように、それはWebクローラーであり、ログアウトしてsshセッションを終了した後でも、Linuxマシンで継続的に実行したいです。この辺りをよく読んで、Nohup python scrape.py &の使用に関する多くの提案がありました。これはうまくいきましたが、ログアウトするとすぐにスクリプトの実行が停止しました。 supervisorアプリケーションも調べましたが、ルート権限がないため失敗します。この問題を解決する方法を提案できますか?ありがとうございました。

2
Krishnang Dalal

同様の目的に使用できるいくつかのアプローチ(ツールとコマンド)があります。

  1. 端末エミュレーターをtmuxおよびscreenとして使用します。

    • tmux -端末マルチプレクサ:複数の端末を単一の画面から作成、アクセス、および制御できるようにします。 tmuxは画面から切り離され、バックグラウンドで実行を継続し、後で再接続されます。基本的な使用例が here および here で提供されています。

    • screen -VT100/ANSIターミナルエミュレーションを備えたスクリーンマネージャー。これは、複数のプロセス(通常は対話型シェル)間で物理端末を多重化するフルスクリーンウィンドウマネージャーです...プログラムは、ウィンドウが現在表示されていない場合や、画面セッション全体がユーザーの端末から切り離されている場合でも実行を続けます。使用例が提供されています here

  2. バックグラウンドで実行される分離コマンドを使用します( read also ):

    • Nohup -非ttyへの出力で、ハングアップの影響を受けないコマンドを実行します。ハングアップ信号を無視して、COMMANDを実行します。コマンドをバックグラウンドにプッシュして現在のシェルセッションからデタッチする一般的な構文:Nohup COMMAND &またはNohupで作成された情報ファイルを一時停止する場合はNohup COMMAND >/dev/null 2>&1 &。基本的な使用例が here および here で提供されています。また、 here は、sshコマンドを使用して使用する方法を示しています。

    • disown -Nohupに似ていますが、組み込みのシェル(zsh、ksh、bash)です。ジョブテーブルからジョブを削除したり、親シェルがそれを受け取った場合(ユーザーがログアウトした場合など)にSIGHUPシグナルが送信されないようにジョブをマークするために使用されます。使用例が提供されています here

    • setsid -セッションを作成し、プロセスグループIDを設定します。使用例setsid "COMMAND"。その他の例 こちら

  3. スケジュールマネージャーをatおよびcrontabとして使用します。

    • at -後でコマンドを実行します。 atおよびbatchは、/bin/shを使用して、後で実行される標準入力または指定されたファイルからコマンドを読み取ります。使用例:echo "COMMAND" | at now + 1 minute。その他の例 こちら

    • crontab -定期的なバックグラウンド作業をスケジュールします。他の目的でよく知られていますが、コマンドが一度だけ実行される特定の瞬間を特定することができます。 Nice crontab計算機が提供されています here

  4. システムサービスを作成して開始します。以下を参照してください。

7
pa4080