QA@IT

Cronとloglotateを使った世代管理について

1997 PV

ディレクトリの世代管理について教えていただけたらと思います。

今、あるディレクトリを世代管理しようとしています。
使用しようとしているのは、cronとlogrotateです。


■1:crontabで以下の処理・記述を行う。

$ su -
# crontab -e
0 2 * * * \cp -rf /var/www/vhosts/test /var/lib/back/

■2:logrotateで以下の処理・記述を行う。

# cd /etc/logrotate.d/
# vi backup
...
# cat backup
/var/lib/back/test{
   daily
   compress
   notifempty
   rotate 8
   dateext
}

■3:確認

# /usr/sbin/logrotate -v /etc/logrotate.conf
rotating pattern: /var/lib/back/test after 1 days (8 rotations)
empty log files are rotated, old logs are removed

イメージとしては、test-日付のファイルができるようにしたいのですが、
どのような設定をすればよろしいでしょうか?
ご教示いただけたらと思います。

回答

/etc/logrotate.d/backupを変更してpostrotateでtarで固めればいいですよ。

/var/lib/back/*gz{
  daily
  rotate8
  dateext
  postrotate
    tar czf /var/lib/back/test.tar.gz /var/www/vhosts/test > /dev/null 2>&1
  endscript
}

ファイル名やディレクトリ名は実際にあわせてください。初期段階では何もないので、最初にtest.tar.gzだけが作成されます。二度目からは日付入りのファイル名でローテートされます。

ただし、CentOS 5だとlogrotateでdateextが動かない場合があるので、そのときは面倒くさいけどこんな感じの簡単なスクリプトを用意してcronで実行すれば動きます。

#!/bin/bash
OLDEST="/var/lib/back/test_"`date --date "7 days ago" "+%Y%m%d"`".tar.gz"

tar czf /var/lib/back/test_`date +%Y%m%d`.tar.gz /var/www/vhosts/test > /dev/null 2>&1
if test -f $OLDEST
then
  rm -f $OLDEST
fi
編集 履歴 (1)
  • 回答ありがとうございます。
    上の方法だと…

    /var/lib/back/test{
    daily
    compress
    rotate 8
    dateext
    postrotate
    tar czf /var/lib/back/test.tar.gz /var/www/vhosts/test >~


    ~~みたいな感じでしょうか?
    -
  • logrotateの範囲が/var/lib/back/test かそれとも /var/lib/back かどうかも不明な部分です。

    ご教示いただけたらと思います。
    -
  • /var/lib/back/以下のgzファイルをローテートします。 -
  • というか、そもそもディレクトリはローテートできないので、事前にtarで固めてローテートしている、ということです。 -
  • ディレクトリはローテートできないのですか!!
    勉強になりました。これから対応してみます。
    -
  • 上記の方法で解決しました。
    書き直しまでしていただき大変ありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。