• ベストアンサー

データ件数が多いことによってログが消えたりしますか?

1500件ほどのログデータがあります。(.txt) このログデータに追加をしたり、修正を加えています。 (cgiを使って) 最近気づいたのですが、以前入力したはずのものが消えていたりするんです。 でも全部が消えるわけではなく、一部が消えるので、プログラムのミスではなさそうなんですが。 このログデータ+cgiは社内のサーバーにアップデートして使用しています。 以前はWeb用のサーバーにおいてあり、使用していましたが、データが消えた?というようなことはなかったのですが、 社内の方においてからそのようなことがおきているのではないかと思うようになりました。 社内の人はそこへは入らない(入れない)ので、もし攻撃を受けているとしたら外部からなのかな?と思い、ログをコピーし、 ローカルに保存しておき、数日たってから中身を照合しようとは思っています。 ですが、あんまりその可能性は考えられないので、それ以外に理由があるのかな?と思ってます。 件数が多いことでログデータが勝手に削除されたりすることはあるのでしょうか? ※cgiはperlでかいています。

  • w-inty
  • お礼率72% (1169/1618)
  • CGI
  • 回答数5
  • ありがとう数5

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

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

基本的にロック処理は読み込み時に行なうものではなく書き込み時に行なうものです。 今のままだとロックの意味がありません。 それにflock関数は全てのサーバで使えるものではありません。お使いのサーバが使えるか確認した方がいいでしょう。

w-inty
質問者

お礼

回答ありがとうございます。 わかりました、確認してみます。 ありがとうございました。

その他の回答 (4)

回答No.4

>みてみたところ233KBでした。 >これが大きいのか小さいのか不明ですが…。 容量的には問題ないと思います。 あとはそのCGIを具体的に書いてもらえるとより的確に解説ができます。 これはCGIの問題というよりサーバ側の問題の可能性もあります。 No.3の方もおっしゃられているようにロック処理は問題ないのでしょうか? そのログファイルをあなたしか編集しないにしてもロック処理はあった方がいいです。 たとえば「書き込み」ボタンを押してログデータに書き込む場合、間違ってダブルクリックのようになったら同時書き込みが発生する可能性もあります。 毎回書き込む毎にログデータがおかしくなるのならばロック処理がおかしいわけではないと思いますが、たまにログファイルが壊れるのならばロック処理が問題なのかもしれません。

w-inty
質問者

お礼

●ログ書き込み時 open (FILE,">>***.log"); @FILES = "名前=$FORM{'NAME'}&…記入時間={'LOCALTIME'}\n"; print FILE @FILES; close (FILE); ●ログファイルオープン時 open FILE,"***.log"; flock(FILE,2); @FILES = <FILE>; flock(FILE,8); close FILE; となっています。 Web用サーバーとまったく同じ状態で使用しているのですが、 サーバーによってロック作業が変わったりするのでしょうか?

  • mhgetter
  • ベストアンサー率0% (0/5)
回答No.3

あくまでバグではなかったという前提の下に読んでください。 CGIですので複数の人が同時にCGIにアクセスする可能性があります。 そのときにある特定のファイルの内容を変更する場合には その処理に同時にアクセスされないようにする必要があります。 たとえばファイルを修正する場合には以下のようなパターンが考えられます。 (1)Aというファイルをオープンする (2)内容を変数$conに読み込む (3)ファイルをクローズする。 (4)変数$conに修正を加える。 (5)AというファイルをWRITEモードでオープンする。 (6)変数$conを書き込む。 (7)ファイルをクローズする。 まず最初のアクセスが(5)まで進んだ状態で、次のアクセスが入ってきたとします。 後者のアクセスがAというファイルを読み出そうとしたところ(1)、前者のアクセスが 書き込みモードでオープン(5)されているために内容が読み込めません。 その後最初のアクセスが正常に処理を終了してファイルAは正常に書き込まれますが、 後者のアクセスが0バイトしか読み込めなかった$conのデータに対して修正を 加えて書き込むため、それまで保存されていた内容がすべてなくなってしまうと いうようなことが起こります。 これを回避するには通常ファイルロックを利用します。 下記のURLが詳しいでしょう。 また、ファイルを追加書き込みする場合にはこの処理は必要ありません。下記のようなプログラムの場合です。 open OUT,">>/data/test.txt"; print OUT time()."\n"; close OUT; 追加書き込みの場合には通常はOSによってそれぞれの書き込み内容が保護されます。

参考URL:
http://tech.bayashi.net/pdmemo/filelock.html
w-inty
質問者

お礼

回答ありがとうございます。 cgiではありますが、そのシステムは私以外は使いません。 (見ることはあるが、書き込みなどは一切ありません。見ることも多分ほとんどないと思います。) 一応ロックはするようにかいてはいるんですけど、あんまり機能してない状態です。

回答No.2

具体的にそのログデータの容量はどのくらいなのでしょうか? 処理の仕方にもよりますが、データを一旦すべて配列に格納してから処理していませんか? そのようにしているとデータが全てメモリに入りますので、サーバのメモリ容量によってはデータが消失してしまいます。当然そのまま保存すればデータの一部が消失した状態になります。 ログの容量とサーバに搭載しているメモリ容量、ログファイルを内部でどのように処理しているかを明記して頂くとさらに詳しく解説できます。

w-inty
質問者

お礼

回答ありがとうございます。 みてみたところ233KBでした。 これが大きいのか小さいのか不明ですが…。

w-inty
質問者

補足

cgi内でログを配列として読み込み。 キーになるデータを元に一覧を作成。 上記に修正を行う場合はキーを入力→検索で探し出してデータを修正できるような形で表示させ、入力後新しいデータを上書き。 という形になっています。

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.1

具体的なことは分かりませんが、各サーバーごとにログが蓄積されますが、ログ領域は有限ですので、ログか大きくなったときの処理は、通常古い記録から消去(押し出し式)していくか、保存期間を設定してそれ以上経過した記録から削除していくなど計算機に設定されています。毎日または週一回タイムスタンプをつけてログを別ファイルとして吐き出して、吐き出した記録はログから削除するなどを行ったりすることが良く行われています。タイムスタンプの付いたログファイルも12か月分保存すると次の1月はその月の旧ログに重ね書き込み保存したりします。 質問者さんのところの各サーバーのログ処理がどうなっているか、すべてのサーバーで一度確認して見られてはいかがでしょうか?

w-inty
質問者

お礼

毎月変わるデータではなく、すべて常に使用するデータなのです。 なので分けるにも分けられず。。。 キーになっている項目がアルファベットなのでアルファベット別にログを分ければいいのでしょうか? でもその後増えたらまた同じになってしまいますよね…。。。

関連するQ&A

  • アクセスログのデータが消える

    現在有料の共有サーバーをレンタルしているのですが CGIを設置してちゃんとアクセスログがとれます。 しかし設定で10000件まで保存するとしても 実際は2000件を越えた時点で今までのデーターを削除しだしてしまいます。しかし設定には上限はありません。 もういいやと思い、ちがうものを選んでみましたが ここも同様、保存できる件数に上限はなく9万件までは 保存するという風に設定しているのに 3000件ぐらいを突破すると最初のころのログが消えながら新しいものがつぎたされます。でも消える時は本当に一瞬で ログ件数が3300であっても、次にクリックするといきなり650とかになってます。プログラム作成者にも対応してもらえず、困り果てております。実際今日徹夜でやっているものの、どうすればよいのかまったく検討もつきません。現在一日1万件ぐらいのアクセスがあるサイトの管理をやっているので、2,3日分をまとめて分析とかしてみたいです。 いまのままでは、まったくやくにたってません。。。。 なぜ私のログデータは消えてしまうのですか? サーバースペースは十分ほどあります。 宜しくお願いします

    • ベストアンサー
    • CGI
  • テキストファイルの件数カウントと照合

    A.txt、B.txt、C.txt の3つのファイルがあります。 1日1回この3ファイルを結合してABC.txtと言う1ファイルにしています(その後別処理で使用)。 結合前(3ファイル)と結合後のレコード件数を照合したいのです。 やりたい事は、 件数が合っていれば、「処理した日にち」「件数」「件数合ってます」 件数が違っていたら、「処理した日にち」「結合前合計件数」「結合後件数」「件数違っています」 をaaa.@bbb.co.jp宛てにメール配信させたいのです。 自分なりにいろいろと調べては見ましたが、VBの知識もほとんど無いため出来ません。 コーディングをご教授いただけるとありがたいです。 よろしくお願いいたします。

  • 外部からのアクセスログを取りたい

    現在、相当古いルータを使っているせいで、アクセスログが意味不明な文字列です。 (時間帯くらいしか解読出来ない) しかもtxtファイルなどとして出力する事が出来ません。 外部からのアクセスログを取り、txtファイル形式などに出力出来るソフトウェアはありませんでしょうか? 出来ればフリーウェアで。 内部アクセスはWin2000AdvancedServerのアクセス権限付与と ローカルセキュリティポリシーで対応しようとしています。 NortonInternetSecurityって外部からのアクセスのログってとれましたっけ? まず、外部からのアクセスのログを取りたいので、 何か最適なソフトウェアがありましたらご教示下さい。 因みにルータの交換というのは検討中です。

  • ログファイルって情報が漏れるのでしょうか?

    CGIでログファイルを使用していますが、ログファイルの中身が外部から盗まれることってあるのでしょうか?あるとすればどのように対策すればよいのでしょう?

  • cgiを使ってサーバ上にファイルを作成する方法

    無料のサーバスペースを使用してHPを作っています。 perlを使って自作したcgiをwindowsのコマンドラインで実行すると open(F,">oceco.txt"); print F "oceco\n"; close(F); この記述でファイルが新規作成されるのに、サーバー上のcgiで実行するとファイルが新規作成されません。 しかし、空のoceco.txtをFTPでサーバーに送って属性変更を済ませ、cgiを実行するとoceco.txtの中身が変更されます。 同じサーバでフリーの掲示板cgiを使用していますが、ログファイルを新規作成できています。 そこで質問です。 cgiをつかってサーバ上でファイルを新規作成する方法を教えてください。

    • ベストアンサー
    • Perl
  • VINE LINUXサーバーでCGIプログラムを動かしたい

    最近、デモ用の社内サーバーとして、VINE LINUX 2.1.5 の入ったPCをたてました。 クライアントはWindowsXPです。いくつかの社内用のプログラムを動かしています。 CGIプログラムを使用したいのですが、どのようにしたら良いでしょうか。 社内サーバーではなく、会社のホームページを表示させているサーバーは、レンタルサーバーで、CGIを使用しているので、CGIのプログラム自体は、自分でできます。 でも、CGIを使用する際の、サーバーの方の設定は分からないのですが。。 htmlを表示させ、CGIを動かしたみたのですが、CGIプログラムの内容がそのまま 表示されてしまいました。Perlをインストールするのではないかと思うのですが。。 だとしたら、VINE LINUX 2.1.5用のPerlのソフトはどこのサイトでダウンロードしてきたら良いでしょうか?

  • IIS+Activeperl データファイル等を絶対パスでしか受け付けてくれません

    Windows2000serverの IIS5.0(だと思います、バージョンの見方が良く分かりません) ActivePerl5.6.1を導入した環境です。 このまえ、Windows2000serverのマシンを入れ替え、 新規にperlをインストールしなおしました。 それでwebページをすべて移動して稼動し始めたのですが、 一部動作しないCGIがあるのです。 調べてみると"./"ではじまるデータファイルやモジュールの読み込みを しているCGIがことごとく動作してませんでした。 データファイルやモジュールを c:\usr\local\bin\perl\libに移動して"./"を削除するか ファイルの指定を "C:\Inetpub\wwwroot\cgi-bin\secure\wforum\wf_log.cgi"のように フルパスで指定しないと動かないのです。 サーバ移転前はちゃんと動いてたのですけど・・・。 いったい私は何の設定を忘れてるのでしょうか。 ややこしい説明ですみませんがよろしくお願いします。

    • ベストアンサー
    • Perl
  • ファイルのアクセスログを知りたいのですが

    Wiindows2000の自宅サーバーについて質問です。 タイムカードのようなcgiがあり、1日に2回、アクセスがあってログが 書き換えられます。 例えばNo.001の人は、2007年1月1日に以下のようなファイルを朝作成して 朝のアクセス時刻を手入力により記録、また夕方には帰りの時刻を手入力 により記録しています。 cgi\log\001\070101.dat  この中身は 「9<>00<>17<>00<>社内業務<>」 のようになっています。 この、1日2回のアクセス時刻を管理したいのですが、ファイルの検索で、 2007/1/1に修正されたファイルを検索すると、更新日時は最後にアクセス された夕方の時刻でしかわかりません。 このファイルにいつアクセスされたか、朝と夕方の正確な時刻がわかるような ログは、どこかに残っているのでしょうか。 ご教示よろしくお願いします。

  • CGI設置時に500エラーになります

    CGIを設置しようとしたところ、500 Internal Server Error になります。 共用サーバーIDを使用しています。 CGIファイルは「cgi-bin」の中に入れています。 たとえばこんな簡単なCGIでテストしたのですが、500 Internal Server Errorになってしまいます。 ↓ #!/usr/local/bin/perl print "Content-type: text/html \n\n"; print "Hello"; #!/usr/local/bin/perlを #!/usr/bin/perlにしても結果は同じです。 (サーバーの指定は#!/usr/local/bin/perl) パーミッションは755にしています(705に変えてもダメでした)。 CGIファイルの改行コードはLFにしており、テキスト(ASCII)モードでアップロードしています。 それでも500 Internet Server Errorになります。 サーバーではエラーログが見られないのでみなさんにお聞きしたいのですが、他にどんな原因が考えられるでしょうか?

  • Perlのアドレスについて

    はじめまして、 Webサーバー初心者です。 CGIを動かすモジュールを入れて実際自分のサーバーでCGIを動かそうと思ったんですが、CGIのプログラムの頭にある「#!user/local/bin/user」(←例です)などのアドレスの指定がよくわかりません。よく、レンタルサーバーとかであると「うちのPerlのアドレスは#!user/local/bin/user」ですなどと表示されていたりしますが、今回は自分がサーバーなのでほかのユーザーがPerlを使うときにアドレスを指定してあげないといけません。どうしたら自分のサーバーのPerlの場所の指定ができるのでしょうか?(ようは,私の場合どのようなアドレスになるのかが知りたいわけです) ちなみにPerlのインストール先は「C:\Perl」でソフトは「Active Perl」を使用しております。サーバーのOSはWindowsXP(Pro)です。 よろしくお願いします。