FTPでのログの差分を取得する方法について
- 約100Mバイトのログファイルの差分を取得するために、FTPを使用してサーバーからログを取得する方法について質問があります。
- バッチファイルとteratermマクロを使用して、ログの差分を取得することを試みましたが、取得できる差分の量がログ全体の約1/3程度しかなく、正常に取得できていない状況です。
- 対処として、teratermマクロの内容を変更する方法を2つ試しましたが、なぜこの変更が効果をもたらすのか理解できていません。アドバイスをいただきたいです。
- ベストアンサー
ftpのgetが正常できる方法について
約100Mバイトのログファイルの差分をとるため、下記のバッチファイルとteratermマクロを実行させました。 やり方は、差分をとりたい2つのログをfptにてサーバーへ転送し、サーバーでsdiffを実行し、差分結果をftpにてとってくるものです。 バッチファイル echo open xx.xx.xx.xx > "%~dp0put.txt" echo abcdef >> "%~dp0put.txt" echo pwabe >> "%~dp0put.txt" echo put log1 log1 >> "%~dp0put.txt" echo put log2 10g2 >> "%~dp0put.txt" echo quit >> "%~dp0put.txt" ftp -s:"%~dp0put.txt" del "%~dp0put.txt" "c:\ProgramFiles\teraterm\ttpmacro.exe" "%~dp0sdiff.ttl" cho open xx.xx.xx.xx > "%~dp0get.txt" echo abcdef >> "%~dp0get.txt" echo pwabc >> "%~dp0get.txt" echo get kekka kekka >> "%~dp0get.txt" echo del log1 >> "%~dp0get.txt" echo del log2 >> "%~dp0get.txt" echo quit >> "%~dp0get.txt" ftp -s:"%~dp0get.txt" del "%~dp0get.txt" exit/b teraterm macro (sdiff.ttl) connect'xx.xx.xx.xx.:xx/ssh/2/auth=/user=abcdef/passwd=pwabc' wait'$' sendln 'sdiff logl log2 > kekka' sendln 'mv kekka kekka1' sendln 'perl -pe "s/\n\r\n/"kekka1 > kekka' wait'$' sendln 'rm kekka' sendln 'rm kekka1' Sendln 'logout' end ここから相談です。 ftpでgetしてきた差分は、ログの頭から3分の1程度しかなく、全ての差分をとることができませんでした。 調査したところ、サーバー側はログ全ての差分を取れていることを確認しました。 なぜ、ftpで作業結果をgetすると、3分の1しかないのか原因がわからないまま、試行錯誤で対処方法を見つけたのが次の方法です。 方法1(teraterm macroの変更1) 次のようにwait'$'を追加する。 sendln 'sdiff logl log2 > kekka' wait'$' sendln 'mv kekka kekka1' wait'$' sendln 'perl -pe "s/\n\r\n/"kekka1 > kekka' 方法2(teraterm macroの変更2) 次のように20秒のpauseをとる。 sendln 'sdiff logl log2 > kekka' pause 20 sendln 'mv kekka kekka1' 方法1も方法2もタイミングを取るような方法ですが、このやり方で、なぜftpでgetした差分結果が正常(ログすべての差分が取れている)になるのかがわかりません。本当にこの対処でよいか判断できません。 どなたか上記方法でよい理由がお解りでしたら、教えてください。
- lcd19v
- お礼率100% (3/3)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数4
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
待ちが無い、ということは、キーの先行入力が行われている、ということになります。 先行入力されたコマンドが実際に実行されるのは、シェルの入力待ちになってからですが、TeraTermのマクロの実行は、明示しない限り先に進みます。 sendlnで送信されるのは一瞬です。 sendln 'sdiff logl log2 > kekka' → sdiffの実行が始まる sendln 'mv kekka kekka1' → その間にキーの先行入力が行われる(一瞬) sendln 'perl -pe "s/\n\r\n/"kekka1 > kekka' → その間にキーの先行入力が行われる(一瞬) wait'$' → perlの終了待ちのつもりかもしれないが、実は、sdiffやmvの終了待ちになってしまっている sendln 'rm kekka' → これが実行されているつもりが、実際は、前のコマンドが順番に実行されている途中。先行入力に溜るだけ sendln 'rm kekka1' → これが実行されているつもりが、実際は、前のコマンドが順番に実行されている途中。先行入力に溜るだけ Sendln 'logout' → これが実行されているつもりが、実際は、前のコマンドが順番に実行されている途中。先行入力に溜るだけ end → logout後にttpmacro.exeを終了しているつもりが、実際は、前のコマンドが順番に実行されている途中。 ↓ ttpmacroが終了したので、ftpの実行開始 → ttpmacroで実行すべきコマンドがまだ完了していないため、処理途中の状態のファイルをgetしている ということでは。 waitを入れることで、プロンプトが表示される=コマンドが終了するのを待って、次のコマンドを実行するので、確実に処理が終った状態で、ftpのgetに進めるのだと思います。 あれ? よく見ると、このマクロ、getしたいファイルまで消してしまってますよね。 ということは、rm kekkaを実行して、実際にアクセスできなくなるまでの微妙なタイミングでftpでget「できてしまっている」ようです。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4848/10262)
> sendln 'rm kekka' せっかく作った差分ファイルを直後に消しているように見えますが。 他にも空白の欠けや意味不明のPerlコード(意味不明というかエラー)などもありますが、見ながら手打ちで投稿してタイプミスしたのですか? コピーペーストで投稿した方が良いですよ。 不正確な情報ではアドバイス不能です。
お礼
>> sendln 'rm kekka' >せっかく作った差分ファイルを直後に消しているように見えますが。 すみません。都合があり、手入力で質問したため、余分に入ってしまいました。 コピーペーストするようにしたいと思います。
補足
>> sendln 'rm kekka' >せっかく作った差分ファイルを直後に消しているように見えますが。 すみません。都合があり、手入力で質問したため、余分に入ってしまいました。 コピーペーストするようにしたいと思います。
関連するQ&A
- FTPのPUT、GETについて
FTPのPUT、GETについてお教え下さい。現在サーバーの設定は完了し、DOS画面よりFTPでPUTを行っているのですが、送信先となるサーバーにファイルサイズがゼロのファイルが作成され、途中で止まった状態になってしまいます。GETも同様でサーバーからクライアントにファイルを取得はしているのですが、ファイルサイズがゼロのファイルが作成され止まった状態になってしまいます。また、他のサーバーでPUT、GETを行うとPUT、GET共にファイルの取得も送信も出来ます(クライアントは同じPCを使っています)。やはりサーバーの設定が足りないのでしょうか? どなたか対策方法をご存知の方がいましたらお教え下さい。よろしくお願い致します。
- ベストアンサー
- その他([技術者向] コンピューター)
- FTP送信
バッチファイル(~.bat)でFTP送信を行いたいのですが。 条件としましては送信先が日付のフォルダに送る事です。 通常(私が知っているのは)・・・・ abcdef.bat ftp -s:c:\temp\test.ftp test.ftp open 192.168.210.112 (user) (password) put c:\temp\aaaa.txt bbbb\aaaa.txt bye ・・・・・です。 abcdef.batを実行するとFTP送信が行われます。 これだと「test.ftp」が固定なので送信先のフォルダが変更できません。 何か方法がわかれば誰か教えて下さい。参考程度でもかまいません。
- ベストアンサー
- Windows系OS
- 自動ftpバッチで転送速度をろぐに出す方法
こんにちは windows2008で自動ftpバッチファイルを作成ししています。 自動ftpは出来るのですが、転送速度がログに出力されません。 具体的には手動でftpすると以下のように表示される「24000.00KB/秒」という部分を ログに出したいです。 200 PORT command successful. 150 Opening ASCII mode data connection for autoexec.bat. 226 Transfer complete. ftp: 24 バイトが送信されました 0.00秒 24000.00KB/秒。 そもそもログに表示させることはできないのでしょうか? お分かりの方、お教えください。 今作っているバッチファイルはこんな感じです。 ftpauto.txt ---------------- ftp -s:ftpcmd.txt>>ftp.log 2>&1 ftpcmd.txt ---------------- open XX.XX.XX.XX user-id Password bin cd / lcd C:\ put XXX disconnect bye ------------------------------------ 宜しくお願いします。
- 締切済み
- Windows系OS
- teratermで、ファイル名をinputstrに代入する
teratermを使って、ftpでputさせたいと思います。 OSは、Linuxベースです。 コマンドラインに於いて $ ls ho* hoge1.txt hoge2.txt ← この1行を、inputstrに代入させたい 自分で作ってみたのは、こんな感じ timeout = 5 sendln 'ls ho*' result = 0 wait 'ho' if result=1 recvln statusbox result 'result ' pause 1 ; ダイアログボックスを閉じる closesbox messagebox inputstr 'inputstr ' これを実行させると、「$ ls ho*」がinputstr に入っている。何故か? waitによって期待していた文字列(hoge1.txt hoge2.txt)を、inputstr に入れたいと思います。 どうしたらいいでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- NTのFTP通信
こんにちわ Windows NT 4.0 workstationにて(数台) FTP転送したいのですが、 転送するファイル名が固定ではありません。 転送するファイルは以下のようなファイルになります。 yanolog.txt saitolog.txt sayamalog.txt このような場合、下記のputのぶぶんを put *log.txt で実行しても転送されるでしょうか? open ftp.noname.ne.jp bluepixy password ascii put *log.txt close quit よろしくお願いします
- ベストアンサー
- その他(プログラミング・開発)
- プロキシサーバー経由でftpのgetを行う方法
社内LANからプロキシサーバーを経由して、外部のサーバにあるファイルをftpでgetしようとし ています。 方法としては、定期実行するためにスクリプトで下記のようなテキスト(ftpcmd.txt)を作成し、 バッチファイル(auto.bat)でftpコマンドを実行する予定です。 <ftpcmd.txt> open xxx.xxx.xxx.xxx user1 passwd1 ascii get /logfiles/todaylog.txt quit <auto.bat> ftp -s:ftpcmd.txt ここで、質問なのですが、上記のような方法を用い、プロキシサーバー経由でftpを使ったgetを 行うには、どのように行えばいいでしょうか。または、DOSコマンドを使って、行うことは無理な のでしょうか。その場合、ほかにはどのようなやり方が考えられるでしょうか。どなたか、ご助言 いただけませんでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- windows2008でftpをバッチ実行する。
windows2008サーバーでバッチファイルを作成しftpで複数ファイルを自動転送しようと思います。 今まで(OSはXP)はうまく実行していたのですが、windows2008サーバーではうまくいきません。 ちなみにバッチファイルは @echo off echo ●FTP処理 C:\Windows\System32\ftp.exe -s:d:\ftp\tohost.txt echo on @echo off echo ●終了 tohost.txtの内容は open 192.168.1.1 Uid Pwd bin put d:\ftpdata\a1.txt /afld/a2.txt bye です。 何かwindows2008による特別な方法があるのでしょうか? よろしくお願いいたします。
- 締切済み
- その他(Windows)
- シーケンス順にget (ftp)
シーケンス順にget (ftp) こんにちは。 当方Windows 2003 Server、相手はWindows系でIIS6.0という構成でFTPで通信を 行いたいと思います。 相手側の所定のフォルダーに、例えば MB001.txt MB002.txt MB003.txt という具合にファイルが格納されています。 これを、当方側がgetで引き取りたいのですが、このときの仕様として、 ・シーケンス順を守りたい(例で言うと001から順に) ・引き取った後はデータを削除する があります。 そこで、シーケンス順を守る形でgetでき、getできたファイルだけを削除する方法が あれば教えてく頂きたいと思います。 どうぞ宜しくお願い致します。
- 締切済み
- その他([技術者向] コンピューター)
- バッチファイルにてFTPで指定したファイルを取得する
OSはWindoswXPProです。 以下のようなBATファイルとバッチファイルを作成しました。 ---FTP.bat--- echo off ftp -s:get.ftp ---get.ftp--- open 10.0.X.X username password cd /log get log.yymmdd(実際には日付) c:\access_all_log.txt quit logというディレクトリには日次でログファイルが作成され ファイル名としてlog.yymmddと名づけられています。 やりたいことは2つあります。 1つめはftpするファイル名の日付部分をコマンドなどから 範囲指定して取得するファイルを指定できないか。 (たとえば070301~070315のファイルを一括で取得したい) 2つ目はftpでのファイル取得終了後に続いて バッチスクリプトを流したいのですが、その方法。 お分かりになる方いらっしゃいましたらよろしくお願いいたします。
- ベストアンサー
- Windows系OS
- [teraterm] waitコマンドで停止しない。
お世話になっております。 現在teratermのマクロを作成しているのですが、waitコマンドがうまく動いてくれない箇所があります。 どなたか解決策をご教授いただけないでしょうか。 【質問】 UNIX上にてシェルを実行後、コマンドプロンプトが戻ってきた時点で"echo $?"にてシェルのリターンコードを確認するマクロを作成しています。しかし、シェルの終了に時間がかかるためか、コマンドプロンプトが戻ってくるのを確認せずに"echo $?"を実行してしまっています。 【プログラム(該当箇所)】 timeout=20 sendln 'シェルの実行' wait ']$ ' sendln 'echo $?' wait '0' 【コンソール上】 ]$ シェルの実行 echo $? シェルの実行結果 ]$ 以上、よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ご教授ありがとうございました。 理解できました。 >あれ?>よく見ると、このマクロ、getしたいファイルまで消してしまってますよね。>ということは、rm kekkaを実行して、実際にアクセスできなくなるまでの微妙なタイミン>グでftpでget「できてしまっている」ようです。 すみません。都合があり、手入力で質問したため、余分に入ってしまいました。 実際は、rm kekkaはやっていません。