SSHを介して開始されたコマンドを終了する方法 - SSH接続が失われました。

SSHを介して開始されたコマンドを終了する方法 - SSH接続が失われました。

私が使うなら

timeout 10 ssh -n -o BatchMode=yes 1.1.1.1 'sleep 20' > 1.1.1.1.txt 2>&1 &

サーバーでリモートコマンドを実行するために、10秒後にSSH接続を切断します。これによりsleep 20、サーバーはまだ実行中ですがSSH接続がないことを確認できます。

タイムアウト(例:10秒)後にリモートコマンドを終了するにはどうすればよいですか?

リモート・システムはAIX 6.1(またはSLES)であり、「タイムアウト」に使用できるパッケージはありません。私のクライアントはUbuntu 10.03です。

ベストアンサー1

リモートサーバーにPOSIX互換シェルがあると仮定すると、次のことが機能します。

ssh ...options... 'command & pid=$!; sleep 20; kill $pid'

もちろんPOSIX規格説明する$!

現在のシェルで実行されている最新のバックグラウンドコマンド(リストを参照)の10進プロセスIDに展開されます。 (たとえば、サブシェルで実行されるバックグラウンドコマンドは現在のシェル環境の「$!」値には影響しません。)パイプラインの場合、プロセスIDはパイプライン内の最後のコマンドのプロセスIDです。

リモートシステムにジョブ制御機能がある場合は、次のように短縮できます。

ssh ...options... 'command & sleep 20; kill %1'

おすすめ記事