時々家に帰る前に長期実行プロセスを開始したいので、サーバーにSSHセッションを作成してプロセスを開始しましたが、それからラップトップを終了して家に帰りたいと思います。
後で夕食後に退勤する前に始まったプロセスを再び見たいと思いました。 SSHを使用してこれをどのように実行できますか?
私が理解したように、SSH接続を中断すると、サーバーのログインセッションも中断され、長期実行プロセスが終了します。
答え1
答え2
GNU画面を使いたいです。本当に素晴らしいです!
ssh [email protected]
screen #start a screen session
run-a-long-process
CTRL+ a、dスクリーンセッションから分離
exit #disconnect from the server, while run-a-long-process continues
ラップトップに戻るとき:
ssh [email protected]
screen -r #resume the screen session
その後、長期実行プロセスの進行状況を確認してください!
screen
は私が説明したよりもはるかに多くのことを行うことができる非常に包括的なツールです。画面セッションでCtrl + Aを試してください。いくつかの一般的なコマンドを学びます。最も一般的なのは、おそらく次のとおりです。
- CTRL+ a、c新しいウィンドウを作成する
- CTRL+ a、nスクリーンセッションから次のウィンドウに切り替える
- CTRL+ a、pスクリーンセッションから前のウィンドウに切り替える
- 複数の異なるシステムからログインしている場合は、誤って他のコンピュータのアクティブ画面セッションに接続することがあります。このため、私は
screen -d -r
別のシェルが私のスクリーンセッションに接続されている場合、現在のシステムで再起動する前にそのシェルが切り離されるように常に再起動します。
答え3
まだ事前に計画して設定していない場合は、screen
次の手順を実行してください。
プロセスがバックグラウンドで実行されている場合:#3に進み、そうでない場合:
Ctrl-Z
フォアグラウンドプロセスを一時停止します。停止したプロセスのジョブ番号を報告します。たとえば、次のようになります。[1]+ Stopped processName
processName
バックグラウンドで送信しますbg %1
(後にジョブ番号を使用%
)。これはprocessName
バックグラウンドで再開されます。否定する
processName
そしてdisown %1
またはdisown PID
。-h
現在のシェルを終了する前に所有権を維持するには、このフラグを使用します。
答え4
マルチプレクサバックグラウンドで長期実行プロセスを実行するのに適した選択です。
Google Cloud Platform(OS:Ubuntu 16.0)のVMインスタンス/サーバーで長期実行プロセスを実行し続ける必要があります。 SSH ターミナルを開始し、プロセスを実行するには、ターミナルでターミナルを接続したままにする必要があります。これまではとても良いです。ただし、SSHターミナル接続が終了すると、長期実行プロセスはすぐに停止するため、SSHターミナルから再起動するか、新しいSSHターミナルで再実行する必要があります。
私はtmux
これが端末が閉じた後に実行したいプロセスが終了するのを防ぐための良い解決策であることがわかりました。
ターミナルマルチプレクサ(tmux
)tmux
セッションを開始します。
- SSHターミナル開始
- タイプ
tmux
。同じ端末でウィンドウが開きます。 - tmuxセッションで長期実行プロセスを開始するには、コマンドを実行してください。
SSH端末が突然閉じられたり終了した場合でも、tmuxセッションはインスタンス/サーバーで開始された実行中のプロセスを実行し続けます。
接続が終了したら、どのように再接続してバックグラウンドtmuxセッションで実行されているプロセスを表示できますか?
- 新しいSSH端末を再接続または開きます。このプロセスを表示するには(バックグラウンドで実行され続ける)、次の
tmux attach
コマンドを入力します。
tmuxセッションを終了するには、次の手順に従ってください。
- プロセスを停止します。次に、
exit
tmux-terminal-windowと入力します。
(注:tmux detach
コマンドを使用すると、tmuxセッションを終了/停止せずにtmuxセッションウィンドウ/ターミナルで終了します)
詳細については、次の記事を参照してください。