以前記事にしました不正アクセスの一件から、ログファイルのチェックを頻繁に行うようになりました、現在IISのログをAwstatsを使用しログのチェックをしておりますがAwstatsではログの更新を自動で行なってくれません、そこでタスクスケジューラに自動更新バッチを登録し自動更新させようとしましたが上手く動きません、手動でバッチファイルを実行するとログの更新が出来るのですが、どうしてなんだろう。
Awstats.pl の場所は D:\wwwroot\Awstats\cgi-bin であるとしてバッチファイルもここに格納しております。
バッチファイルの内容は以下の通りです
cd "d:\wwwroot\awstats\cgi-bin" awstats.pl -config=awstats.conf -update
このバッチファイルをタスクスケジューラに登録し15分おきに更新する様に設定しました、バッチファイルの登録方法はここで詳しく説明されています。
しかしタスクスケジューラでバッチファイルは、確かに15分おきに実行されていますが、一向にログが更新されません、手動でバッチファイルを実行するとログの更新がされるのに何がいけないの。
以下がタスクスケジューラの履歴です。
画像の上から2行目の反転している部分の内容が下に表示されています一見タスクが完了しているように見えますが、問題は一番最後のリターンコード数字が「1」になっています、この数字の意味は次のような内容です。
リターンコードの数字の意味
0 - タスクが正常に完了しました。
1 - 指定したパラメーターが不適切です。
2 - 不明なエラーです。
3 - タスクの実行エラーです。
4 - タスクがキャンセルされました。
指定したパラメータが不適切ですとはどうゆうことでしょうか、Perl のパスは通してあるしプログラムディレクトリは絶対パスで指定してあるし、しかも手動実行では問題なく動くのに、どうしたら良いのかお手上げ状態。
そこで同じようなエラーでタスクが実行できない方がいないかググってみました、ありました。
対処の仕方
要するに作業ディレクトリを設定しないといけないようです、上の画像は作業ディレクトリを設定する画面
タスクのプロパティ⇒操作タブ⇒操作の編集⇒開始(オプション)(T)に作業ディレクトリを指定してやれば良いみたいです、このパラメータを入れなかったので「パラメータが不適切」だと怒られたのですね。
この場合だと 開始(オプション)(T) に作業ディレクトリ(実行するプログラムが入っているフォルダ)を指定するので。
d:\wwwroot\awstats\cgi-bin\ と入力してやればOKです。
また別の方法もあるようで、バッチファイルに作業ディレクトリを指定してもよいみたいですのでこの方法で行います。
バッチファイルに赤文字部分を追加
cd /D %~dp0 cd "d:\wwwroot\awstats\cgi-bin" awstats.pl -config=awstats.conf -update
cd コマンドの 「/D オプションは ドライブ及びディレクトリをパラメータで指定した場所に移動」するものです、「%~dp0 とは実行されているファイルが置かれているカレントディレクトリ」の事です、つまりバッチファイルを実行している場所にドライブとディレクトリを移動すると言う意味だそうで、上記のタスク設定画面に入力するのと同じ事のようです。
結果
さあこれでログが自動更新されるでしょうかタスクを実行してみました。
上の画像は修正後の実行結果です、下の履歴内容を見ると リターンコードが「0」になっています、タスクが正常に終了した証拠です、ログも自動更新されいました。