• ベストアンサー

こういうことってできるんでしょうか?

まだまだ勉強中なので、よく理解できてない点が多いんですが、PerlでCGIプログラムを組まなければいけなくなりそうなので質問させていただきます。 したいことは ●あるログファイルが一定の量を超えると、他のサーバにそのログファイルを移したい。 ●他サーバに移したログファイルは削除し、新たなログファイルを生成する です。 これをおそらく既存のCGIに埋め込む形で作ることになりそうです。 フリーで公開されているスクリプトを見ていると、ログファイルを過去ログとして保存していくことができるのはわかっています。 それを他サーバに移すことは可能なんでしょうか? また、既存のCGIでは、そのログからアクセス解析等を行っています。 他サーバに古いデータが移ってしまうと、おそらく解析結果も変わってしまうことになりますよね? 仮に上記のようなプログラムが組めるものとして、やっぱりかなり難しいプログラムになるんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1です。 >サーバにログを移す方法ですが、まだ検討中です。 >というのも、某レンタルサーバから他のレンタルサーバに移す操作をしなくてはならないからです。 >これって可能なんでしょうか? サーバー上でどこまでの操作が可能かによりますね。 お話を読ませていただく限りではFTPで転送、といったあたりが妥当な線になるかと思います。 移す先のサーバーにFTPサーバーが動いていて、FTPのアクセス権(ユーザーIDとパスワード)があれば問題なく可能です。 ただ、スクリプトは先にも書きましたようにFTPアクセスするようなスクリプトにする必要がありますが。 >移すタイミングは可能であれば、『一定バイト数を超えたら』で行いたいんですが…可能なんでしょうか? もちろん可能です。if文のファイル検査オプションでサイズを調べることができます。確かif (-s ファイル名)だったかな・・・?調べて書いてないので、Perlのリファレンスを参照ください。 これで一定サイズを超えていれば転送ルーチンを始動してやればいいわけです。 ただ、これをCGIでやると、運悪く転送ルーチンを引いた人がCGIの終了を待たされるかもしれませんので、cron(WindowsならAT)を使用して時限起動にするのがベターです。 あと、転送する際にはログファイルのロックを忘れないようにしてください。ロックといっても、ログファイルの転送開始時に何かファイル(ロックファイル)を作り、転送が終わるとそのファイルを消す。それだけです。ログへの書き込みルーチンでは、そのロックファイルの有無をチェックして、ある場合はなくなるまで待つようにしないといけません。

nana_ko
質問者

お礼

ありがとうございます。 サーバ間の転送も移すタイミングを容量にするのも可能なんですね。 転送時にロックファイルを作る…掲示板なんかで使われているのと同じですよね。 お勉強になりました。

その他の回答 (2)

  • duckling
  • ベストアンサー率47% (88/185)
回答No.3

技術としては、可能です。 移すタイミング、は、 cronを使うか、 誰かがログに書き込んだ時に総数を計算、 という形をとるとして、 一定量を超えた際、perlでftpポートを開いて 保存用サーバに転送して、 現ログファイルを削除すればOKです。 ただ、perlにftpモジュールが必要で、 保存用サーバがIPアドレス登録無しでFTPを開いてくれる(普通は大丈夫) というのが条件になります。 cron処理の場合、 レンタルサーバで行うのは無理(やらせてくれない)のではないかと。 解析結果が変わってしまうのは必然で、 もともとが、保存用サーバのログも一緒に読み込んで解析する、 というプログラムでもない限りは、この事態は避けられないですね。 しかし、Perlの技術が「組まなければいけなくなりそう」というレベルなのでしたら このプログラムの作成は難しいのではないかと思われます。

nana_ko
質問者

お礼

ftpモジュールがない場合はftpでの転送はできないことになるんですかね? httpを使うことはできるんでしょうか? サーバはレンタルなので…cron使うのは無理ですかねぇ、やっぱり。 んー…やっぱり組むとなると難しいですよね…もしもの場合を考えて、他の対処法も考えようと思います。 ありがとうございました。

回答No.1

難しいのは「他サーバに移す」というところですが、どのような方法で移すことをお考えですか? UNIX(Linux)サーバーで、NFS(SMB)マウントされているサーバーに移すだけなどなら、普通にファイルを移動するのと同じ事をするだけですから簡単ですよね。 FTPなどを使うと言うなら、ライブラリを使用するなどしてFTPでファイルを転送できるスクリプトを組む必要があります。 データベースサーバーに入れると言うことであれば、データベースアクセス用のスクリプトが必要です。これも探せばライブラリがあるでしょう。 以上、どの方法をお考えですか? WindowでActivePerlを使っているのであれば、FTPなどを簡単に行なうことのできるライブラリがあります(ヘルプを探してくださいね)。 ファイルの削除はunlinkでOKです。 あと、CGIでやると移動タイミングはCGIが起動された瞬間(ユーザーがCGIを動かしたとき)に限られてしまいます。これを毎晩やりたいなどと言うことでしたら、UNIX(Linux)だったらcron、Windows(NT/2000系)ならATコマンドなどで定期的にスクリプトを実行するようにする必要があります。

nana_ko
質問者

補足

早々の回答ありがとうございます。 サーバにログを移す方法ですが、まだ検討中です。 というのも、某レンタルサーバから他のレンタルサーバに移す操作をしなくてはならないからです。 これって可能なんでしょうか? 移すタイミングは可能であれば、『一定バイト数を超えたら』で行いたいんですが…可能なんでしょうか?

関連するQ&A

専門家に質問してみよう