Logrotate:非ログファイルを回転しますか?


17

さまざまなファイルとディレクトリを圧縮し、.tgzアーカイブを作成するバックアップスクリプトがあります。ファイルには名前が付けられます。例えば

...
backup_2010-10-28.tar.gz
backup_2010-10-29.tar.gz
backup_2010-10-30.tar.gz
backup_2010-10-31.tar.gz
backup_2010-11-01.tar.gz

これらのファイルを管理して、最後の5つのバックアップのみが保持され、古いファイルが削除されるようにします。

これを行うためにlogrotateを使用できますか?ログファイルではなく、既に圧縮されています。それらは/ var / logではなく/ rootにあります-まだ使用できますか?

ありがとう

回答:


3

Logrotateはファイルをローテーションするので、答えは「はい」です。おそらく、十分な権限がない場合は、/ backupなどに配置してください。ローテーションされたログのグループとユーザーを確認してください:-)。

logrotateには圧縮オプションがあります。「compress」が設定されていない場合は、そうではありません。また、あなたの場合、「5回転」オプション。

/etc/logrotate.d(またはシステムに保存されている場所)を見てください


26

プロセスを変更しなければ、logrotateだけではここで求めていることはできません。ここでの重要な問題は、logrotateはワイルドカードを使用できますが、ファイルを1つとして扱うことはせず、代わりにすべてを個別に回転させようとすることです。

ただし、日付スタンプなしで最新のバックアップが作成される限り、説明どおりに機能させることができます。たとえば、バックアッププロセスで作成/root/backup.tar.gzする場合、次のlogrotate構成を使用できます。

/root/backup.tar.gz {
    rotate 5
    nocompress
    dateext
    dateformat _%Y-%m-%d
    extension .tar.gz
    missingok
}

ここでオプションの簡単な概要:

  • rotate 5 -削除する前に5つの回転を維持する
  • nocompress -回転後にファイルを圧縮しません
  • dateext -数字をインクリメントする代わりに、日付を回転拡張として使用します
  • dateformat _%Y-%m-%d -使用する日付拡張形式を設定します
  • extension .tar.gz- .tar.gz回転拡張の後に来る
  • missingok -回転させたいファイルがそこになければ、それを心配せずに先に進みます(デフォルトではエラーをスローします)

お役に立てれば!


1
よくやった。これを読んでいくつかのことを学びました。ただし、一部のディストリビューション、特にRedHat ELは、「エンタープライズ対応」ではないオプションを削除する傾向があるため、YMMVを追加したいと思います。
zerolagtime

このソリューションによると、 stackoverflow.com / questions / 14858752 /…logrotateはタスクを達成できます。
ピーター

22

そのためにlogrotateを使用する必要はありません。次のようなコマンドを使用します。

ls -1 /root/backup_* | sort -r | tail -n +6 | xargs rm > /dev/null 2>&1

このコマンドは、最新の5つのファイルを残し、残り(ある場合)を削除します。cronジョブで使用できます。


しかし、これは回転しません
。...-simpleuser

質問に答えません。
クバンチク

4
問題は、最新のバックアップを5つ保持することでした。さらに簡単:ls -t1 / root / backup_ * | テール-n +6 | xargs rm -f
yoyoma2

これで私の質問に答えました。悲しいことに、元の質問は、Google-fuで最も近いものでした。
スキマ

0

ちょうど同じ状況になりました。Logrotateはかなりクールに聞こえますが、データとファイル名が一致しないため、100%で機能しませんでした。

そのため、混乱を避けるために、最新のバックアップを5つ保持するために、現在のバックアップを作成した後に実行する次の行を組み込むことにしました。

私のログは次のとおりです。

  • tbl-bcx-20180308_010501.tar.bz2
  • tbl-bcx-20180307_010501.tar.bz2
  • tbl-bcx-20180306_010501.tar.bz2

バックアップスクリプトへの新しい行(上記のコメントに基づく)

  • / BCX / dumpsql / -type fを見つけます| sort -r | テール-n +6 | xargs rm

よろしく、


-1

手動で回転できます。

rotating_logger()
{

_LOG_FILE_=${1}
_MESSAGE_TO_ECHO_=${2}

_LOG_FILE_BYTES_SIZE_=`wc -c ${_LOG_FILE_} | awk '{print $1}'`

#echo "_LOG_FILE_BYTES_SIZE_ : ${_LOG_FILE_BYTES_SIZE_}"

# in MB
if [ ${_LOG_FILE_BYTES_SIZE_} -gt ${_FILE_SIZE_IN_BYTES_} ] ; then
        #cat /dev/null > ${_LOG_FILE_}
         for (( i=${_LOG_ROTATE_MAX_INDEX_}; i>=1; i-- ))
        do
                 if [ $i -eq ${_LOG_ROTATE_MAX_INDEX_} -a -f ${_LOG_FILE_}.$i ] ; then
                        rm -rf ${_LOG_FILE_}.$i
                 fi

                if [ $i -gt 10 ] ; then
                        rm -rf ${_LOG_FILE_}.10
                elif [ $i -eq 9 -a -f ${_LOG_FILE_}.9 ] ; then
                       mv ${_LOG_FILE_}.9 ${_LOG_FILE_}.10
                elif [ $i -eq 8 -a -f ${_LOG_FILE_}.8 ] ; then
                       mv ${_LOG_FILE_}.8 ${_LOG_FILE_}.9
                elif [ $i -eq 7 -a -f ${_LOG_FILE_}.7 ] ; then
                       mv ${_LOG_FILE_}.7 ${_LOG_FILE_}.8
                elif [ $i -eq 6 -a -f ${_LOG_FILE_}.6 ] ; then
                       mv ${_LOG_FILE_}.6 ${_LOG_FILE_}.7
                elif [ $i -eq 5 -a -f ${_LOG_FILE_}.5 ] ; then
                       mv ${_LOG_FILE_}.5 ${_LOG_FILE_}.6
                elif [ $i -eq 4 -a -f ${_LOG_FILE_}.4  ] ; then
                       mv ${_LOG_FILE_}.4 ${_LOG_FILE_}.5
                elif [ $i -eq 3 -a -f ${_LOG_FILE_}.3  ] ; then
                       mv ${_LOG_FILE_}.3 ${_LOG_FILE_}.4
                elif [ $i -eq 2 -a -f ${_LOG_FILE_}.2  ] ; then
                       mv ${_LOG_FILE_}.2 ${_LOG_FILE_}.3
                elif [ $i -eq 1 -a -f ${_LOG_FILE_}.1 ] ; then
                       mv ${_LOG_FILE_}.1 ${_LOG_FILE_}.2
                fi
        done
        mv ${_LOG_FILE_} ${_LOG_FILE_}.1
        touch ${_LOG_FILE_}
fi

echo `date +%Y-%m-%d:%H:%M:%S` : "${_MESSAGE_TO_ECHO_}" >> ${_LOG_FILE_}
#echo "" >> ${_LOG_FILE_}
}

データをログに記録するには、次のようにします

rotating_logger <file_path> "Welcome world!"

1
おそらく、投稿を便利にしたい場合は、投稿の書式設定に少し手間をかけることができます。
ティム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.