e日記風 独り言

#気まぐれ & 気まま & 天邪鬼な老いぼれ技術屋の日々の記録のうち、主に Perl・CGI・HTMLなど Web技術に関連した記事です。
右端上端の同一カテゴリージャンプボタンで同じカテゴリーの他の記事を順番にご覧いただけます。
Access Counter:  総アクセス数
-2295- Windows PowerShell
= 今日は画像なし m(_ _)m =
またまた狭い話だが。
Webサーバー上の CGIファイルを ローカルでテストするための環境 xampp で Apacheというサーバーアプリを実行しているが、php/perl などのスクリプトがエラーを吐くと Apacheのエラーログにその内容が記録される。しかしこのエラーログはデフォルトではずっと消えないで追加されていくので、いつの間にか 数百MB以上に膨れてしまう。エラーログも流石に 数百MBになると、テキストエディタで開くのに若干の時間がかかって嬉しくないし、新しいエラーは最後に追加されるのでスクロールするのが面倒だ。
Web情報では Apacheの標準で httpd.confファイルの ErrorLog "logs/error.log" に替えて
ErrorLog "| bin/rotatelogs.exe logs/error_%Y%m0.log 86400"
などとすれば定期的にローテートして小さなサイズのまま運用できるとなっているが、何故か書いてあるとおりには動作せず、Apacheが起動できなくなったり新しいエラーの記録が追加されなかったり。Apacheのバージョンや環境による違いなのか? 深追いするとケガをしそうだ。
そこで一計を案じて、例えば Windowsにログオンしたとき、エラーログが 100行以上だったら最後の 100行を残して残りは捨ててしまうような PowerShellスクリプトを考えてみた。

$filePath = "C:\xampp\Apache\logs\error.log"
$readstr = Get-Content $filePath -Tail 100
$readstr | Out-File $filePath

このスクリプトを .ps1という拡張子で保存し、それを Windowsのタスクスケジューラでログオン時に新規タスクを実行するように 「操作」タブの「プログラムの開始」を
%Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数を -ExcecutionPolicy RemoteSigned <.ps1スクリプトのパス>
などとしたら上記のようにわずか 3行で目的は達せられた。 2行目と 3行めをいきなりパイブでつなぐことも可能かな?と思ったが、読み込みと書き出しが同時ではダメだろうと思いつつも、試してみた限りやはり 出力ファイルは 0byteで空だった。パイプでは読み込みつつ同じファイルに書き出すことになるので、一旦メモリに読み込んでから処理する必要があるということだろう。PowerShellで「読み書きモード」で検索してみたが見つけられなかったので上記のまま運用中。但し、このままだとスクリプトを実行したとき、PowerShellの青い実行ウインドウが開いたままになりカッコ悪い。
その後 機能拡張して本格運用
2023/06/25
このページ(pdiary_2295.html)にコメント/質問をどうぞ
タイトル(30文字以内)
コメント
お名前(ID:10文字以内)
URL(HP or ブログをお持ちの方)
パスワード*
タイトル・コメント・ID は必須です
このページ(pdiary_2295.html)への今までのコメント/質問
このページにはまだ表示できる投稿がありません。

Back to Page top