web-dev-qa-db-ja.com

バックグラウンドでSSHを介して実行中のプロセスの出力をリダイレクトする

これが私の一般的な質問です:リモートサーバーにログインし、継続的に実行されているプロセスを開始し、そのプロセスの標準出力をローカルマシン上のファイルにリダイレクトし、これらすべてをバックグラウンドで(ローカル上で)実行するにはどうすればよいですか?機械)?

具体的には、tsharkの出力をリモートのRaspberry Piからローカルマシン(実際には、Cygwinを実行しているWindowsを備えた別のリモートマシン-長い話)にパイプして、ログファイルに書き込もうとしています。私は出力リダイレクトなしでコマンドを実行することから始めました:

ssh pi@remotehost "\
Sudo tshark \
-i wlan1mon \
-I -l -f broadcast \
-Y wlan.fc.subtype==4 \
-T fields \
-e wlan.sa \
-e frame.time_Epoch"

これは私が期待するように機能しているようです。ターミナルでデータのストリームを取得します。次に、出力リダイレクトを追加しようとしました。

ssh pi@remotehost "\
Sudo tshark \
-i wlan1mon \
-I -l -f broadcast \
-Y wlan.fc.subtype==4 \
-T fields \
-e wlan.sa \
-e frame.time_Epoch" \
> /var/tshark.out

これも期待どおりに機能しているようです。ターミナルに標準エラーが書き込まれ、プロセスを終了して出力ファイル(/var/tshark.out)を確認すると、tsharkからの標準出力が表示されます。次に、これを自分のマシンのバックグラウンドで実行しようとします。

ssh pi@remotehost "\
Sudo tshark \
-i wlan1mon \
-I -l -f broadcast \
-Y wlan.fc.subtype==4 \
-T fields \
-e wlan.sa \
-e frame.time_Epoch" \
> /var/tshark.out &

残念ながら、これは望ましい効果をもたらしません。出力ファイルをチェックすると空であり、ジョブのステータスをチェックすると(「jobs」コマンドを実行して)、停止していることがわかります。これがジョブからの出力です(読みやすくするために少し再フォーマットしました):

[1]+  Stopped   ssh pi@remotehost
                "Sudo tshark
                -i wlan1mon
                -I -l -f broadcast
                -Y wlan.fc.subtype==4
                -T fields
                -e wlan.sa
                -e frame.time_Epoch"
                > /var/tshark.out &

これにより、リモートプロセスとローカルプロセスの両方でバックグラウンド処理とNohup処理のさまざまな順列を試すことができましたが、役に立ちませんでした。

2
igal

使用 -fsshに切り替えます。これにより、認証やその他の潜在的にインタラクティブな手順の後にコマンドがバックグラウンドに送信されます。

4
Jakuje