SSHセッションが切断された後もプロセスの実行を維持する

SSHセッションが切断された後もプロセスの実行を維持する

時々家に帰る前に長期実行プロセスを開始したいので、サーバーにSSHセッションを作成してプロセスを開始しましたが、それからラップトップを終了して家に帰りたいと思います。

後で夕食後に退勤する前に始まったプロセスを再び見たいと思いました。 SSHを使用してこれをどのように実行できますか?

私が理解したように、SSH接続を中断すると、サーバーのログインセッションも中断され、長期実行プロセスが終了します。

答え1

使用nohupプロセスが中断を無視するようにするシグナル:

$ nohup long-running-process &
$ exit

進行状況を監視するには、nohupの出力を確認してください。

$ tail -f nohup.out

答え2

GNU画面を使いたいです。本当に素晴らしいです!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+ adスクリーンセッションから分離

exit                 #disconnect from the server, while run-a-long-process continues

ラップトップに戻るとき:

ssh [email protected]
screen -r            #resume the screen session

その後、長期実行プロセスの進行状況を確認してください!

screenは私が説明したよりもはるかに多くのことを行うことができる非常に包括的なツールです。画面セッションでCtrl + Aを試してください。いくつかの一般的なコマンドを学びます。最も一般的なのは、おそらく次のとおりです。

  • CTRL+ ac新しいウィンドウを作成する
  • CTRL+ anスクリーンセッションから次のウィンドウに切り替える
  • CTRL+ apスクリーンセッションから前のウィンドウに切り替える
  • 複数の異なるシステムからログインしている場合は、誤って他のコンピュータのアクティブ画面セッションに接続することがあります。このため、私はscreen -d -r別のシェルが私のスクリーンセッションに接続されている場合、現在のシステムで再起動する前にそのシェルが切り離されるように常に再起動します。

答え3

まだ事前に計画して設定していない場合は、screen次の手順を実行してください。

  1. プロセスがバックグラウンドで実行されている場合:#3に進み、そうでない場合:Ctrl-Zフォアグラウンドプロセスを一時停止します。停止したプロセスのジョブ番号を報告します。たとえば、次のようになります。

    [1]+  Stopped                 processName
    
  2. processNameバックグラウンドで送信しますbg %1(後にジョブ番号を使用%)。これはprocessNameバックグラウンドで再開されます。

  3. 否定する processNameそしてdisown %1またはdisown PID-h現在のシェルを終了する前に所有権を維持するには、このフラグを使用します。

答え4

マルチプレクサバックグラウンドで長期実行プロセスを実行するのに適した選択です。

Google Cloud Platform(OS:Ubuntu 16.0)のVMインスタンス/サーバーで長期実行プロセスを実行し続ける必要があります。 SSH ターミナルを開始し、プロセスを実行するには、ターミナルでターミナルを接続したままにする必要があります。これまではとても良いです。ただし、SSHターミナル接続が終了すると、長期実行プロセスはすぐに停止するため、SSHターミナルから再起動するか、新しいSSHターミナルで再実行する必要があります。

私はtmuxこれが端末が閉じた後に実行したいプロセスが終了するのを防ぐための良い解決策であることがわかりました。

ターミナルマルチプレクサtmuxtmuxセッションを開始します。

  1. SSHターミナル開始
  2. タイプtmux。同じ端末でウィンドウが開きます。
  3. tmuxセッションで長期実行プロセスを開始するには、コマンドを実行してください。

SSH端末が突然閉じられたり終了した場合でも、tmuxセッションはインスタンス/サーバーで開始された実行中のプロセスを実行し続けます。

接続が終了したら、どのように再接続してバックグラウンドtmuxセッションで実行されているプロセスを表示できますか?

  1. 新しいSSH端末を再接続または開きます。このプロセスを表示するには(バックグラウンドで実行され続ける)、次のtmux attachコマンドを入力します。

tmuxセッションを終了するには、次の手順に従ってください。

  1. プロセスを停止します。次に、exittmux-terminal-windowと入力します。

(注:tmux detachコマンドを使用すると、tmuxセッションを終了/停止せずにtmuxセッションウィンドウ/ターミナルで終了します)

詳細については、次の記事を参照してください。

  1. https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-running-in-the-Background/

関連情報