logrotateは(ログ・ローテート)、増え続けるログファイルを定期的に世代交代させ、ディスク容量のパンクを防ぐためのシステム管理ツールになります。
ログを自作しながら学ぶで作成しました自作のログの書き込みの仕組みをlogrotateに登録してみます。
始めにlogrotateが動作しているか?を確認してみます。
下記コマンドを実行して、logrotateが次回の実行日時を出力します。
$ systemctl list-timers | grep logrotate
Wed 2026-04-22 00:50:56 JST 10h Tue 2026-04-21 10:48:22 JST 3h 28min ago logrotate.timer logrotate.service
のような出力があれば、logrotateは動作していることになります。
自作のログの書き込みをlogrotateに登録します。
下記コマンドで登録用のファイルを作成します。
$ micro /etc/logrotate.d/mylogger
この時、/var/log/myloggerの方のディレクトリ名と設定用のファイル名を合わせます。
新規で作成しましたファイルには下記の内容を作成します。
/var/log/mylogger/*.log {
su root adm
daily
rotate 7
missingok
notifempty
compress
delaycompress
create 0664 root adm
copytruncate
}
ファイルの作成後、下記のコマンドを実行して強制的にログファイルを世代交代してみます。
$ sudo logrotate -f /etc/logrotate.d/mylogger
※オプションが -d の場合、通常の動作確認になります。
$ /var/log/mylogger
を実行して、
app.log app.log.1
新たなファイルが作成されていれば、設定は終了です。
/etc/logrotate.d/myloggerで書いた各項目について
su root adm:rootユーザー、admグループとして実行することを明示
daily:毎日チェックする
rotate 7:7日分残す(それを過ぎたら古い順に削除)
missingok:ログファイルがなくてもエラーを出さない
notifempty:ログが0バイト(空)なら何もしない
compress:古いログは圧縮する
delaycompress:「.1」の段階では圧縮せず、「.2」から圧縮する
create 0664 root adm:新しい空ファイルをこの権限で作る
copytruncate:前世代のファイル作成時に自動で都合よくしてくれるような設定