本家のお世話-#5。

 本家のお世話-#4。で書いたようにapacheのlogを分けるようにした。access.logへの記入をユーザエージェントや画像の拡張子で分けるようにしたので,大本のaccess.logのサイズがぐっと小さくなり,月一度のローテートがうまくいって,万々歳と自己満足していた。
 実は,access.logの月一度のローテートのほかに,エラーログについては日一度のローテートも始めたていたのだが,使っているのは,本家のお世話-#3。で書いたような非常に雑な .bat だ。ところが,その作業上で,8日と9日に困ったことが起こった。単に,私の知識不足から起こったことなのだが,そのことについて忘れないように書いておこうと思う。

 エラーログを切り出すときにerror”日”.logのようにその日の日付を入れるようにしたのだが,それ(DY)を決めるのに以下のような方法をとっていた。

  1. set DY=%DATE:/=% <—— 年月日を形式○○○○○○で取得
  2. set DY=%DY:~-2% <—— 日付の切り出し。
  3. set /a DY=DY-1 <—— 実際の操作が00:00になるので,一日戻す。

 当然だが,1日の日にこの作業をするとDYは0になってしまう。が,この辺を直すのは面倒くさいので目をつぶることにしていた。ところが,8日と9日に最後のDYが-1になる事態が発生した。
 なんでーっと,いろいろ調べてみたら,バッチファイルでの数値の書き方に次のような制限があることが分かった。
 「数値は,デフォルトでは10進数   接頭辞として0xをつけると16進数   接頭辞として0をつけると8進数」
 うーん,エラーコードなんぞで接頭辞0x (0x0000000Aとか) はよく見るけど,0というのは知らなんだ。

 なるほど,上記の set DY=%DY:~-2% のときに,1日から9日までは,01,02,03,……08,09となるわけで,この間我が家のサーバは8進数として計算しようとするわけだ。set /a DY=DY-1 で数値として計算しようとするとき,01~07までは10進数扱いでも8進数扱いでも問題は生じないが,8進数で08,09はあり得ないから,エラーになって,DYが-1になってしまうわけだ。

 で,これの解決なんだけど,2.と3.の間に
    if “%DY%”==”08” (set DY=8)
    if “%DY%”==”09” (set DY=9)
を入れた。ものすごくその場凌ぎな処置だけど,自鯖だし,影響受けるのは私だけですから(笑)。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください