私は時々、家に帰る前にキックオフしたいプロセスを長時間実行しているので、サーバーへのSSHセッションを作成してプロセスを開始しますが、ラップトップを閉じて家に帰り、後で夕食後に仕事を辞める前に始めたプロセスを確認してください。SSHでこれを行うにはどうすればよいですか?私の理解では、SSH接続を切断すると、サーバー上のログインセッションも切断されるため、長時間実行されているプロセスが終了します。
私は時々、家に帰る前にキックオフしたいプロセスを長時間実行しているので、サーバーへのSSHセッションを作成してプロセスを開始しますが、ラップトップを閉じて家に帰り、後で夕食後に仕事を辞める前に始めたプロセスを確認してください。SSHでこれを行うにはどうすればよいですか?私の理解では、SSH接続を切断すると、サーバー上のログインセッションも切断されるため、長時間実行されているプロセスが終了します。
回答:
を使用nohup
して、プロセスでハングアップ信号を無視します。
$ nohup long-running-process &
$ exit
nohup
SIGHUPをインターセプトして、実行したシェルが終了し、まだ実行中のすべての子にSIGHUPを送信したときにlong-running-process
死なないようにします。disown
指定されたジョブをBashの子リストから削除するだけなので、SIGHUPを送信しようとはしません。nohup
はシェルとは別のプログラムなので、すべてのシェルで動作しますdisown
が、Bashビルトインです。nohup
実行するコマンドを受け入れますがdisown
、ジョブが開始され、シェルに戻ることができるようにバックグラウンドになった後にのみ機能します。
tail -f nohup.out
戻ってきたときに何が起こっているかを確認する。
GNU Screenを使用します。すごいね!
ssh me@myserver.com
screen #start a screen session
run-a-long-process
CTRL+ a、dスクリーンセッションからデタッチするには
exit #disconnect from the server, while run-a-long-process continues
ラップトップに戻ったら:
ssh me@myserver.com
screen -r #resume the screen session
その後、長期実行プロセスの進捗を確認してください!
screen
は非常に包括的なツールであり、私が説明した以上のことができます。スクリーンセッション中にctrl + aを試してください。いくつかの一般的なコマンドを学習します。おそらく最も一般的なものは次のとおりです。
screen -d -r
別のシェルがスクリーンセッションに接続されている場合、現在のシステムで再開する前に切り離されるように、常に再開します。screen -S name
を作成し、他の友人にで接続させますscreen -x name
。
tmux
with tmuxinator
は、凝った設定に最適な組み合わせですが、私screen
は迅速でシンプルなソリューションとして好みます。
事前に計画してセットアップしていない場合screen
などは、次のようにします。
プロセスがバックグラウンドで実行されている場合:goto#3、そうでない場合:Ctrl-Z
フォアグラウンドプロセスを中断します。これにより、たとえば、中断されたプロセスのジョブ番号が報告されます。
[1]+ Stopped processName
でprocessName
バックグラウンドに送信しますbg %1
(ジョブ番号がに続いているものを使用%
)。これはprocessName
バックグラウンドで再開します。
またはで否認processName
します。現在のシェルを終了するまで所有権を維持する場合は、フラグを使用します。disown %1
disown PID
-h
&
私はそれを始めたときに使用していなかったので、私はそれを続けることができないと思っていました。これはうまくいくようです!
使用したいのは、screenまたはさらに良いのはbyobuと呼ばれる画面のユーザーフレンドリーなラッパーです。
画面を使用すると、同じsshセッションで複数の仮想端末セッションを実行できます。チュートリアルやヘルプページが用意されています。
byobuは、ctrl-aのキーの組み合わせではなく、単純なファンクションキーを使用して新しい画面を簡単に開くことができるラッパーです。また、名前を付けることができるすべての開いている仮想端末を含むステータス行も表示します。
もう1つの便利な機能は、ssh接続が切断されている間、すべての画面を表示できるという事実です。sshを介して再度接続し、byobuを呼び出すだけで、すべては以前と同じです。
最後に、by風のスクリーンショットをいくつか。
古い質問、奇妙なまだtmuxに助言した人はいません。tmuxはn個のコンソールのラッパーとして機能し、必要になるまで開いたままにします。これにより、tmuxの多くの機能に加えて、より多くの制御が可能になります。簡単に管理できます。tmuxを実行するだけでシェルが起動し、ルーオンジョブを開始し、ctrl + bに続いてd(detach)を押します(ctrl+b
tmuxの「ok google」で、d
閉じるコマンドです)シェルを終了せずに)。これは、たとえばパテを閉じるだけで実際に機能します。夕食後、再度接続すると、tmuxを再度開いて、tmux attach
画面をそのまま表示できます。私が気に入っているのはペインを分割することです:ctrl+b
を押し"
ます。あるペインから別のペインに変更するにはctrl+b
、上/下矢印を押します。
ここで良いガイドを見つけることができます: 切断したときにSSHセッションを実行し続ける
sudo apt-get install screen
これで、コマンドラインにscreenと入力するだけで、新しいスクリーンセッションを開始できます。画面に関する情報が表示されます。Enterキーを押すと、通常のプロンプトが表示されます。
切断する(ただし、セッションを実行したまま)には、 ヒットCtrl+ A当時とCtrl+ Dすぐに連続して。メッセージが表示されます[切り離されました]
すでに実行中のセッションに再接続するには
screen -r
既存のセッションに再接続するか、存在しない場合は新しいセッションを作成するには
screen -D -r
実行中の画面セッションの内部で新しいウィンドウを作成するには、 ヒットCtrl+ A、その後Cすぐに連続して。新しいプロンプトが表示されます。
別の画面ウィンドウから切り替えるに ヒットCtrl+ A、その後、Ctrl+ Aすぐに連続して。
オープン画面のウィンドウ一覧表示するには ヒットCtrl+ A、その後Wすぐに連続しての
<kbd>Ctrl</kbd>
キーボードキーとして名前を表示するために使用できます。
NX NoMachineを使用していますが、これは私だけであるため無料です。基本的に、サーバー上でXセッションを実行し、何度も接続したり切断したりできます。Xセッションは、接続していないときに実行され続けます。どこからでも接続できます。フローティングウィンドウまたはデスクトップ全体を含む単一のウィンドウ(完全なGnomeデスクトップなど)を選択できます。クライアント(ラップトップで実行するクライアント)は、Linux、MacOS、Solaris、またはMicrosoft Windowsで実行できます。後者の場合、フローティングウィンドウを選択すると、Windowsタスクバーに個別に表示されます。
NX Nomachineを使用する2台のLinuxサーバーのフロントエンドとして、Windows XPラップトップ(特定のWindows固有のハードウェアに必要)を使用します。LinuxからWindowsラップトップに接続されているプリンターに印刷することもできます。