例えば、データを収集するのに、
(1)リモートのマシンのあるコマンドを起動する
(2)そのコマンドの実行が終了するには、20分くらいかかる
(3)終了後、ファイルコピーしたい
というような要望がある場合。
ここで、条件として
・クライアントは、サーバーに、sshとscpが使える
・サーバーからは、どのクライアントから呼ばれたか判らない
(そもそも、scp.sshクライアントは使わない)
・クライアントからは、1件1件処理するのではなく、
同時に処理を起動したい
とする。
このときは、以下の処理を行う
・リモート先のジョブをバックグラウンドで起動する
ssh サーバーアドレス 処理内容 (引数内に、どのジョブかわかる) &
・出来たかどうかを、クライアントから確認する
ssh サーバーアドレス ps axl | grep 上記引数
・出来あがったら、サーバーが作ったファイルをコピー
scp サーバーアドレス:サーバーファイルパス ローカルパス
これについて、それぞれ書いてみる
■リモート先のジョブをバックグラウンドで起動する
SSHをバックグラウンド(&をつけて)実行する。
そうすれば、クライアント側では、いくつも同時に投入できる
その際、引数に、どのジョブがやっているかわかるように、
識別子をいれる。
例:シェル /tmp/xmldtpというジョブを3つ行いたい。
区別するために
ジョブ1の識別子 1234
ジョブ2の識別子 5678
ジョブ3の識別子 9012
とする。リモート先のIPアドレス 192.168.1.192
のときジョブ1は
ssh 192.168.1.192 /tmp/xmldtp myno1234 &
■出来たかどうかを、クライアントから確認する
定期的に、出来たかどうかを、psで確認する。
識別子を含んでいる行をgrepで表示させる
例:上記のジョブ1を確認する場合
ssh 192.168.1.192 ps axl | grep myno1234
を定期的(1秒間隔とか)で投げる。
処理中なら
0 501 2909 2908 20 0 6032 1296 - Ss ? 0:00 bash -c /tmp/xmldtp myno1234
のように、なにか帰ってくる。
処理が終了していたら、何も帰ってこない
■出来あがったら、サーバーが作ったファイルをコピー
終了したら、scpでコピーする
例:ジョブ1が終了すると、/tmp/kekka1234がサーバー(192.168.1.192)に出来ている
それをローカルにコピー
scp 192.168.1.192:/tmp/kekka1234 kekka1234
なかんじかな・・・
(1)リモートのマシンのあるコマンドを起動する
(2)そのコマンドの実行が終了するには、20分くらいかかる
(3)終了後、ファイルコピーしたい
というような要望がある場合。
ここで、条件として
・クライアントは、サーバーに、sshとscpが使える
・サーバーからは、どのクライアントから呼ばれたか判らない
(そもそも、scp.sshクライアントは使わない)
・クライアントからは、1件1件処理するのではなく、
同時に処理を起動したい
とする。
このときは、以下の処理を行う
・リモート先のジョブをバックグラウンドで起動する
ssh サーバーアドレス 処理内容 (引数内に、どのジョブかわかる) &
・出来たかどうかを、クライアントから確認する
ssh サーバーアドレス ps axl | grep 上記引数
・出来あがったら、サーバーが作ったファイルをコピー
scp サーバーアドレス:サーバーファイルパス ローカルパス
これについて、それぞれ書いてみる
■リモート先のジョブをバックグラウンドで起動する
SSHをバックグラウンド(&をつけて)実行する。
そうすれば、クライアント側では、いくつも同時に投入できる
その際、引数に、どのジョブがやっているかわかるように、
識別子をいれる。
例:シェル /tmp/xmldtpというジョブを3つ行いたい。
区別するために
ジョブ1の識別子 1234
ジョブ2の識別子 5678
ジョブ3の識別子 9012
とする。リモート先のIPアドレス 192.168.1.192
のときジョブ1は
ssh 192.168.1.192 /tmp/xmldtp myno1234 &
■出来たかどうかを、クライアントから確認する
定期的に、出来たかどうかを、psで確認する。
識別子を含んでいる行をgrepで表示させる
例:上記のジョブ1を確認する場合
ssh 192.168.1.192 ps axl | grep myno1234
を定期的(1秒間隔とか)で投げる。
処理中なら
0 501 2909 2908 20 0 6032 1296 - Ss ? 0:00 bash -c /tmp/xmldtp myno1234
のように、なにか帰ってくる。
処理が終了していたら、何も帰ってこない
■出来あがったら、サーバーが作ったファイルをコピー
終了したら、scpでコピーする
例:ジョブ1が終了すると、/tmp/kekka1234がサーバー(192.168.1.192)に出来ている
それをローカルにコピー
scp 192.168.1.192:/tmp/kekka1234 kekka1234
なかんじかな・・・