ログローテート 後回転スクリプトとファイル名

logrotateユーティリティを使用しない* nix管理者はいないと思います。 多くの場合、システムにインストールされているとは思わずに使用します。 しかし、対象のログファイルを解析する必要があるとき、私は非常に驚きました。





そのため、タスクは子豚のニッケルのように単純ですが、はるかに頻繁に発生します。 ローテーション後にログを解析する必要があります。 / var / log / squidにsquid'aテキストログがあるとします。 次のように/etc/logrotate.d/squidがあります。

/var/log/squid/*.log { daily missingok rotate 8 compress copytruncate delaycompress notifempty nocreate sharedscripts postrotate /etc/init.d/squid reload > /dev/null endscript }
      
      





つまり、ログファイルを1日に1回ローテーションします。ローテーションの後、 squidを再起動し、新しくリリースされたファイルをクリックしません。 明らかな解決策は、 postrotateのハンドラーに次のような呼び出しを追加することです。

  postrotate /etc/init.d/squid reload > /dev/null /--/sq_control/manage.py squid --load-log $FILENAME endscript
      
      





しかし、そこにありました。 マナは、回転前/回転後の変数については何も言いません。 何もありません。 あたかも彼らがそこにいなくて、誰もそれらを必要としていないかのように。 グーグルも具体的な結果を生み出しませんでした。 しかし、pokeメソッドを使用すると、変数$ 1にファイル名が含まれていることがわかりました。 真実は、回転後に起こるものではなく、マスクの下に収まるものです。 この場合、/ var / log / squid / access.logは必要なものではなく、パンでもあります。 logrotateが標準で接尾辞-YYYYMMDDを追加し、手元にsedがあることを知ると、次のようになります。

  postrotate /etc/init.d/squid reload > /dev/null fffn=$1"-"`date '+%Y%m%d'` fffn=`echo "$fffn" | sed -r 's/\s+//g'` /--/sq_control/manage.py squid --load-log $fffn endscript
      
      







より良い解決策がある場合は、共有して批判します。



All Articles