teratermマクロとperlの関係の質問です。


http://q.hatena.ne.jp/1224804216http://q.hatena.ne.jp/1225074107の続きなのですが、teratermでダウンロードするのに時間がかかります。でもteratermを短い時間間隔で実行したいと思っています。perlの実行時間は非常に短いです。

teratermを短い時間間隔で実行すると1.log,2.log,3.log・・・がダウンロード終了前に出来上がってしまいます。一方teratermの一つのダウンロード終了後にperlを実行するようにすると今のプログラムでは(http://q.hatena.ne.jp/1225074107を参照)最新の2つ、2.log、3.logが選択されて実行されてしまい、1.logの処理が行われません。しかも2.log、3.logはダウンロードが終了されてないかもしれません。

方法としてはダウンロードが終了されているもを確実に選んで、古い残っている1.logと2.logの処理を実行してから、1.logを消して、2.logと3.logを実行するというようにしたいです。

教えてください。よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/11/10 11:40:01
  • 終了:2008/11/11 11:21:10

回答(1件)

id:startkit No.1

startkit回答回数166ベストアンサー獲得回数12008/11/11 01:45:26

いみわかりません。早いのがよければperlで組んだ方がいいわけです。

  • id:labtest
    質問が分かりにくいと思ったので追記です。

    teratermで短い時間内に実行しダウンロードしながらperlで必要なデータだけ引き抜いていきたいと思っています。

    短い時間内(数分)でずっと1ヶ月くらい回し続けたいので、1ヶ月間ダウンロードしたいため、HDDのスペースの問題があるので、どんどんperlで必要なデータだけ引き抜いてダウンロードしたファイルは削除していきたいと思っています。

    質問が分かりにくくてすみません。
  • id:zzz_1980
    やりたいことがわからないので如何ともしがたいのですが、
    cygwin の sh script で teraterm を起動-log生成-log解析するようにすれば、
    log をとるたびに script が走りますが、そういうことではなくて?

    はてな上で質問しながらテストスクリプトを直していくよりも、
    最初からテストに対する要求を全部並べておいて、
    要求仕様、設計仕様の作成と実装、テストのテストまで含めて
    誰かに委託したほうがいいんじゃないかと思います。
  • id:labtest
    zzz_1980さん

    分かりにくくてすみません。

    ダウンロードに時間がかかるのでteratermが並列進行(正確には1分ずれで同時に動いているときがある)で動く場合を心配してます。

    teratermはマクロが始まってすぐにlogファイルを生成します。しかしこれは完成してないlogファイルです。完成してないというのはperl側では判断できません。

    今のperlの動作は最新版とその1つ前のファイルを利用して解析します。

    しかし単純にteraterm1とteraterm2が並列に動作して、teraterm1が最初に終了した後に、スクリプトですぐにperlで解析を始めてしまうと、teraterm2が作っている最中のlogファイルを最新版と勘違いしてしまいます(と思います。動作確認してません)。

    >要求仕様、設計仕様の作成と実装、テストのテストまで含めて
    >誰かに委託したほうがいいんじゃないかと思います。

    それが一番いいかもしれないですね。ただそういう環境ではないのですみません。
  • id:zzz_1980
    teraterm の log を create するときに、本来の名前でなくテンポラリな名前にしておいて
    log を close してから本来の名前に変更するというスクリプトを書きましたが、
    teraterm が並列して走っているということは同時に終了する可能性があるので
    同じ名前の log が出来上がってしまいます、ということでこの案はボツ。
  • id:zzz_1980
    ・teraterm のlog の close時の時刻を元にログファイル名を生成する。
    ・ファイル名は logmmddhhmmssXX.log とし、XX の部分は 00-99 をとる。(同一時刻終了対策)
    という仕様で log ファイルを生成すればいいんじゃないかと思いますが、どうでしょう?
    ほかに仕様の追加・変更があれば先に承ります。(^^)
  • id:labtest
    zzz_1980さん、いつも大変ありがとうございます。

    質問文が足りなかったのがいけなかったのですが、実は最終的に下記の質問のように差分をとりたいと思っています。
    http://q.hatena.ne.jp/1225247038

    もしteraterm1が最初に実行されて、teraterm2がその次に実行されたにもかかわらず、終わる順番が逆になると、close時刻を元にログファイルを生成する場合、差分がうまく取れません。
    (追加が削除、削除が追加になってしまいます)

    何か良い方法がありますでしょうか?
  • id:zzz_1980
    どうしても teraterm を同時に走らせるのであれば、
    スクリプト側で log がそろうのを待つ必要があるかと。
    teraterm マクロで log close 直前に末尾に何か書き込んで、
    それを捕まえるまで現れるまでひたすら待つとか。
  • id:labtest
    zzz_1980さん

    昨日ずっと考えてみました。

    close時間を指定すると差分が上手く取れない可能性があるから、ファイル作成開始時をファイル名とする。
    teratermを繰り返す間隔が固定されているので、teraterm1の次のteraterm2のファイル名を特定する。
    ただし間隔を1分と固定しても完全に1分後に実施されるとは限らない?ので少し余裕を持たせる(10秒とか)。
    終了したか判断するためにteraterm終了後にスクリプトを実行してlogファイルをrenameする。.logを.datにとか。

    以上2つファイル名の時間間隔によりteraterm1のlogの次のlog名を見つけつつ、renameにより終了判断をする。

    まだアイディアしか浮かんでないのですが、何か問題となりそうな所はありますでしょうか?
  • id:labtest
    zzz_1980さん

    >teraterm マクロで log close 直前に末尾に何か書き込んで、
    >それを捕まえるまで現れるまでひたすら待つとか。

    実はteratermでtelnetしている時にファイルの一番最終行にはtelnetのコマンドプロンプトが現れます。
    だからこれを捕まえるという方法は使えるかなと思います。
  • id:zzz_1980
    teraterm を起動したときの時刻をファイル名とするlogファイルを作る。(条件1)
    log への書き込みが終了してファイルを close する順はランダムである(条件2)
    logがひとつしかないときは何もしないで処理対象がそろうまで待つ。(条件3)
    ファイルネーム昇順(時刻の古いものから新しいものへ)順次差分をとる。(条件4)
    もっとも新しいlogは残す。(条件5)
    比較スクリプト起動中にあらたな teraterm マクロが起動する。(条件6)
    (例)
    ファイル名が
    090001.log,090005.log,090006.log,090007.log
    生成順が
    090001.log,090007.log,090006.log,090005.log
    のとき
    090001.logと090005.log
    090005.logと090006.log
    090006.logと090007.log
    の差分を求めよ。
    =====
    誤り出力例
    090001.logと090006.log の差分をとってしまう。(中抜き)
    090007.logと090006.log の差分をとってしまう。(逆順)
    次にスクリプトを起動したとき、090007.logの存在を忘れてしまう。(終了処理誤)

    さてどうしましょ。


  • id:zzz_1980
    diff をとるのは別の質問でした(苦笑)
    perl は苦手なのでパス。
  • id:labtest
    zzz_1980さん

    ありがとうございました。別の方法を考えたいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません