以前、
リモート先でジョブが終わったかどうかを確認する
http://blog.goo.ne.jp/xmldtp/e/cbbdbadaae9c2c8eea8ed8b2ed3cb0dd
というのを書いた。
ここでは、結局
(1)SSHでバックグランドでジョブ起動
(2)動いているかどうか確認
(3)終了したら、データを取ってくる。
ということだった。
ここで、(1)について考えてみると、
たとえば、192.168.1.180から
ssh 192.168.1.192 /tmp/xmldtp 1234 &
を起動したとすると、
SSHコマンド実行の返り値は、/tmp/xmldtpを起動したことに対する
返り値であって、このxmldtp内で実行した処理に対する返り値は
わからない。
これらのxmldtp内部の処理の返り値と標準出力を受け取りたいというのが、
今日のお題
■お題
192.168.1.180から
ssh 192.168.1.192 /tmp/xmldtp 1234 &
を起動すると、192.168.1.192では、以下の/tmp/xmldtp内の
シェルが実行する。
ここで、/tmp/xmldtp1、/tmp/xmldtp2の2つの処理を行っているが、
この返り値を取得し、それも/tmp/kekka$1.txtに入れて、返してほしい。
■2つの方法
返り値は、$?で取得できる。
このとき、大きく2つの方法が考えられる
(1)戻り値($?)の値もファイルにechoで書き出し、
標準出力と共に、1つのファイルに書き出した後
不要な作業ファイルを削除する
→すべてファイルに書き出す作戦
(2)バッククウォートで実行し、標準出力を変数に入れる
戻り値($?)の値も、何かの変数に入れる
これら変数をファイルに書き出す
→すべて、変数に入れる作戦
これらの中間で、一部ファイル、一部変数に入れる形も考えられる。
が、今回はこの両極端を考える。
以下、スクリプトを記述する
■方法1:すべてファイルに書き出す作戦
こんなかんじ
まあ、説明は要らないだろう
■方法2:すべて変数に入れる作戦
こんなかんじ
バッククウォートで実行(`/tmp/xmldtp1`)しているので、変数(job1out)
には、標準出力値が入る。
$?も変数にいれ、それらをまとめて書き出している。
はじめに作業ファイルを作るので(起動していることを示すため)
これを削除しているが、標準出力と戻り値に関しては、変数にいれ、
これらをファイル書き出ししていない。
■比較
ファイルを使わないので、削除し忘れの無い、方法2のほうが、
一見良いように見える。
しかし、方法2は変数に入れるため、大量のデータが変数領域に
はいることになる。これが、よいかどうか・・・
が問題になる。変数にいれるのがよろしくないとなると、
方法1になる。
リモート先でジョブが終わったかどうかを確認する
http://blog.goo.ne.jp/xmldtp/e/cbbdbadaae9c2c8eea8ed8b2ed3cb0dd
というのを書いた。
ここでは、結局
(1)SSHでバックグランドでジョブ起動
(2)動いているかどうか確認
(3)終了したら、データを取ってくる。
ということだった。
ここで、(1)について考えてみると、
たとえば、192.168.1.180から
ssh 192.168.1.192 /tmp/xmldtp 1234 &
を起動したとすると、
SSHコマンド実行の返り値は、/tmp/xmldtpを起動したことに対する
返り値であって、このxmldtp内で実行した処理に対する返り値は
わからない。
これらのxmldtp内部の処理の返り値と標準出力を受け取りたいというのが、
今日のお題
■お題
192.168.1.180から
ssh 192.168.1.192 /tmp/xmldtp 1234 &
を起動すると、192.168.1.192では、以下の/tmp/xmldtp内の
シェルが実行する。
touch "/tmp/job.txt" /tmp/xmldtp1 > "/tmp/kekka1_.txt" /tmp/xmldtp2 > "/tmp/kekka2_.txt" cat "/tmp/kekka1_.txt" "/tmp/kekka2_.txt" > "/tmp/kekka.txt" rm "/tmp/job.txt" "/tmp/kekka1_.txt" "/tmp/kekka2_.txt" |
ここで、/tmp/xmldtp1、/tmp/xmldtp2の2つの処理を行っているが、
この返り値を取得し、それも/tmp/kekka$1.txtに入れて、返してほしい。
■2つの方法
返り値は、$?で取得できる。
このとき、大きく2つの方法が考えられる
(1)戻り値($?)の値もファイルにechoで書き出し、
標準出力と共に、1つのファイルに書き出した後
不要な作業ファイルを削除する
→すべてファイルに書き出す作戦
(2)バッククウォートで実行し、標準出力を変数に入れる
戻り値($?)の値も、何かの変数に入れる
これら変数をファイルに書き出す
→すべて、変数に入れる作戦
これらの中間で、一部ファイル、一部変数に入れる形も考えられる。
が、今回はこの両極端を考える。
以下、スクリプトを記述する
■方法1:すべてファイルに書き出す作戦
こんなかんじ
|
まあ、説明は要らないだろう
■方法2:すべて変数に入れる作戦
こんなかんじ
|
バッククウォートで実行(`/tmp/xmldtp1`)しているので、変数(job1out)
には、標準出力値が入る。
$?も変数にいれ、それらをまとめて書き出している。
はじめに作業ファイルを作るので(起動していることを示すため)
これを削除しているが、標準出力と戻り値に関しては、変数にいれ、
これらをファイル書き出ししていない。
■比較
ファイルを使わないので、削除し忘れの無い、方法2のほうが、
一見良いように見える。
しかし、方法2は変数に入れるため、大量のデータが変数領域に
はいることになる。これが、よいかどうか・・・
が問題になる。変数にいれるのがよろしくないとなると、
方法1になる。