goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

リモート先でジョブが終わったかどうかを確認する

2013-12-02 18:20:35 | Weblog
例えば、データを収集するのに、
(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





なかんじかな・・・
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 要求の形式言語Event-Bから、... | トップ | <NHK>受信料の全世帯(... »
最新の画像もっと見る

Weblog」カテゴリの最新記事