オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

logrotateのスクリプト

»

Linuxではログファイルの世代管理にlogrotateを使うことが多く、実際、とても便利なのですが、バージョンによる違いなのか、Linuxのディストリビューションによる違いなのか分かりませんが、かなり致命的な差があります。

困ったときの備忘録として簡単に書いておきます。

logrotateではprerotateやpostrotateなどを使ってローテーション前後にスクリプトを記述することができます。その際に、ローテーションされたファイル名が欲しいことがあるのですが、その取得方法が微妙に違います。sharedscriptsを指定するかどうかでさらに違うかも知れませんが、以下の情報は指定した場合です。

★$1,$2・・・と別の変数に個別にファイル名が入る:ファイル名はpostrotateならローテート後のファイル名


# cat /etc/debian_version
6.0.10
# dpkg --list|grep logrotate
ii logrotate 3.7.8-6 Log rotation utility

★$1にスペース区切りでファイル名が入る:ファイル名はpostrotateでも対象ファイルで指定したままのファイル名


# cat /etc/redhat-release
CentOS release 6.7 (Final)
# rpm -qa|grep logrotate
logrotate-3.7.8-23.el6.x86_64

これはスクリプトを書く際にかなりの差であり、こんな根本的なところを変えないで欲しいものです。どちらかというとDebianの方がローテート後のファイル名なので使いやすい気がしますが・・・。

ログローテーションのついでに統計データを作っておきたかったり、固めてリモートバックアップしたりと、スクリプト機能はとても便利なのですが、十分注意して、動きを確認してから使うようにしましょう!

ところで、スクリプトで自分で作ったコマンドなどを実行しようとする際には、また別の落とし穴が待ち構えています。SELinuxが有効になっていると、権限エラーで実行されません。直接postscriptなどで実行させても、別のスクリプト経由で実行させてもダメです。自分でlogrotateコマンドを実行すると動作するのですが、cronから自動実行される際には権限エラーになります。気がつかないとかなり悩みます。正しい設定の仕方はよく知らないので、とりあえず私の場合は目的としてもSELinuxは不要なことが多いので、無効化して逃げることが多いのですが、こちらも気をつけましょう。

Comment(0)