1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

logrotateはどうやって動いているのか

Posted at

環境

Ubuntu20.4

記事

rsyslogサービスが起動していれば、/var/logの中にsyslogが作られているはずです。サービスの起動を確認するコマンドはservice --status-all | grep rsyslog。このコマンドを実行して、[ + ] rsyslogと表示されていれば、起動されています。

サービスに関する詳細な情報も表示させたい場合は、systemctl status rsyslogでも確認ができる。syslogが作られる場所は、デフォルトで、ls -l /var/log/syslogとなっている。

rsyslogに関する情報が記載されているファイルは、基本的に、/etc/syslog.confであるが、syslogファイルの出力先のパスが記載されているファイルは、ここではなく、/etc/rsyslog.d/50-default.confに書かれている。

中身を見てみると、.;auth,authpriv.none -/var/log/syslogの行がある。ここのパスを変更すれば、syslogの出力先を変更することができる。設定の左側をセレクタといい、出力するログの種類が設定できる。基本的にデフォルトのままで問題ない。

ls -l /var/log/syslog[2-9].gzをすると、syslogのバックアップローテーションが動いていることが確認できる。ローテーションを作成しているプログラムは、rsyslogではなく、logrotateという別プログラムが動いている。logrotateはデーモンとして常駐して動くタイプのプログラムではなく、ワンショットで1回動いて終わるタイプ。

その設定を確認してみる。systemctl cat logrotate.servicelogrotateのユニットファイルの中身を見てみると、Type=oneshotとなっている。そして、ExecStart=/usr/sbin/logrotate /etc/logrotate.confの記述がある。logrotate.serviceから、/usr/sbin/logrotateを動かしていることが分かる。/etc/logrotate.confは引き渡すパラメータ。ユニットファイルの名前と、実際に動かすサービス名が同じ場合、systemctl cat logrotate.serviceは、拡張子を省略して、systemctl cat logrotateだけでもOKとなる。大抵の場合、同じになっているはず。

そして、logrotate.serviceは、logrotate.timerからキックされる。systemctl cat logrotate.timerで中身を参照してみると、OnCalendar=dailyの記載がある。つまり、ログローテーションは毎日実行されているということだ。実際に、ls -l /var/log/syslog[2-9].gzで表示されるバックアップのアーカイブファイルの更新日付は、1日単位になっていることが確認できる。

そして更に、logrotate.timerをキックしているが、timers.tagetで、timers.tagetをキックしているんのが、サービスの大元であるsystemdに行き着く。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?