web-dev-qa-db-ja.com

SSHログアウト後もプロセスを存続させます

ワイヤレス802.11sメッシュ接続上の2台のコンピューター間の帯域幅、パケット損失、遅延、およびジッターを測定しようとしています。

次のことができる(私の最初の)bashスクリプトを作成しようとしています:

  1. 別のコンピューターにSSHで接続し、サービス(ptpdtcpdumpiperf)からデータのログ記録を開始します。
  2. 自分のコンピューターで同じプロセスを開始し、データのログ記録を開始します。
  3. 自分のコンピューターでのiperf送信が終了すると、リモートコンピューターにSSHで接続し、サービスを強制終了する必要があります。

このためのアイデアは、これらの3つのステップをforループで実行し、反復ごとにiperfによって送信されるパッケージサイズを増やし、結果のデータをログに記録することです。

ssh Host@adress processによってリモートPCでプロセスを開始する方法を知っています。

ただし、ログアウトするとプロセスが終了するため、SSHとログアウトを介して複数のプロセスを開始する方法がわかりません。 screenコマンドとNohupコマンドを見てきましたが、スクリプトでそれらを使用する方法がわかりません。

前もって感謝します!

編集:

これまでのすべての助けに感謝します。

Nohupを動作させるようになりました。人々が指摘するように、それは非常に簡単でした。これで、メインPCのスクリプトにssh Host@adress Nohup ./script.sh > /dev/null 2>&1 &が表示されました。これにより、リモートPCでスクリプトが正常に開始され、SSHからログアウトされます。次の問題は、リモートPCでSudoとしてスクリプトを実行する方法です。これはtcpdumpで必要になるためです。

ssh Host@adress **Sudo** Nohup ./script.sh > /dev/null 2>&1 &を試しても機能しません。

何か案は?

編集2:

誰かが同じ問題で立ち往生している場合、私はこれを解決する方法のガイドを見つけました:

http://www.pantz.org/software/ssh/using_ssh_and_Sudo_instead_of_root_for_remote_commands.html

5
Thomas

screenを使用します。

いくつかの便利なショートカット:

  • ctrl + a + c:新しい「ウィンドウ」を作成します
  • ctrl + a + n:次の「ウィンドウ」に移動
  • ctrl + a + p:前の「ウィンドウ」に移動
  • ctrl + a + d:セッションをデタッチします(実行を継続します)

切り離した後、screen -rを使用してセッションを再開します。スクリーンセッションが切り離されていないが、他の方法でバックグラウンドに移行した(または実際にはまだ別の端末で実行されている)場合もscreen -xがあります。

7
Ivan Vučica

Nohup--helpから;

Usage: Nohup COMMAND [ARG]...
  or:  Nohup OPTION
Run COMMAND, ignoring hangup signals.

&コマンドにNohup <whatever you want to run>を追加するだけです。スポーンされたNohupプロセスを具体的に強制終了しない限り、それがなくなることはないということです。

screenまたはtmuxを使用すると、Nohupを完全にスキップできます。これにより、リモートホストへの接続が切断された場合でも、プロセスが実行され続けると聞きました(これは、かなり優れた長所の1つです)。ただし、これを行う方法がわからないため、ダウンロード後にman screen/man tmuxを実行して独自の読み取りを行う必要があります。

5
qweet

プログラムの前にNohupを付けることができます。

例えば。 Nohup myprogram &。これにより、プログラムが起動し、すべての出力がNohup.outというファイルに送信されます。また、ログアウト時にsigHUPをキャッチします。

別の解決策は、screenまたはtmuxを実行することです。

2
Hennes

答えはあなたの質問にあります。 screenまたはNohupコマンドを使用します。それらの使い方がわかりませんか?

試してみてください

ssh Host@address Nohup command args &。 &は、sshシェルをローカルシステムのバックグラウンドに配置します。これは、sshトンネルが可能な限り長く残ることを意味します。ただし、Nohupコマンドは、何らかの理由でローカルcommandプロセスが終了するか、リモートホストへの接続が失われた場合に、リモートシステムで実行されているsshが終了するのを防ぎます。

0
allquixotic