重複の可能性:
設定された SSH チャネルの使用
これは私の同期スクリプトです。
ssh [email protected] /etc/init.d/some_service stop
scp [email protected]:/var/some_service/events ./events
scp ./new_data [email protected]:/var/some_service/new_data
ssh [email protected] /etc/init.d/some_service start
ご覧のとおり、サービスを停止してscpを使用していくつかのコピーを実行してから、サービスを再起動してください。
問題は、4つの「類似した」SSH接続を連続的に「消費」することです。
1つの物理SSH接続を使用してすべての操作を実行する方法はありますか?
ベストアンサー1
SSH 接続共有の使用を検討できます。
Host *.some-domain
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
ターゲットに一度だけ接続し、SSHプロセスをバックグラウンドに置くだけです。その後、別のコマンドを実行し、最後に最初のプロセスを終了します。
あるいは、SSH接続で複数のタスクをカプセル化してみることもできます。
たとえば、次のようなディレクトリがあるとします。
mycommands
|
+- run
+- new_data
その後、このデータをtarにパッケージ化してスクリプトに送信できます。
tar cf - -C mycommands . | ssh localhost 'D=`mktemp -d`; tar xf - -C $D; $D/run'
これでrun
、スクリプトはすべての入力データにアクセスできるようになります(ここにはnew_data
例のデータのみがあります)。あなたの例に固執するために、 run
スクリプトは次のとおりです。
#!/bin/sh
BASE=`dirname $0`
/etc/init.d/some_service stop
cat /var/some_service/events
mv $BASE/new_data /var/some_service/new_data
/etc/init.d/some_service start
rm -rf $BASE
これでファイルを保存できますevents
。
tar cf - -C mycommands . | ssh localhost 'D=`mktemp -d`; tar xf - -C $D; $D/run' >./events
より一般的には、run
スクリプトがtarを生成し、ssh
tarをパイプしてローカルで解凍することができます。