お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2020-12-02 13:16:52

mikan_mikan
メンバ
登録日: 2018-05-25

syslogのバックアップの仕組み

環境:Ubuntu16.4

rsyslogのバックアップが作成される仕組みについて学習したいと思っています。

現在、rsyslogのサービスが常住しており、/var/log/syslogにログが出力されています。
また、syslog.1、syslog.2.gzといったログのバックアップもちゃんと作成されています。

logrotateというサービスでログのバックアップが行われるようなのですが、logrotateのサービスは現在動いていません。それなのに、どうしてバックアップが作成されているのが、分からない状態です。

どなたか教えて頂けませんでしょうか。

オフライン

 

#2 2020-12-02 22:09:30

elliptic
メンバ
登録日: 2020-03-05

Re: syslogのバックアップの仕組み

mikan_mikan による投稿:

logrotateというサービスでログのバックアップが行われるようなのですが、logrotateのサービスは現在動いていません。それなのに、どうしてバックアップが作成されているのが、分からない状態です。

ログローテーションは logrotate.service が
/usr/sbin/logrotate /etc/logrotate.conf
というコマンドラインを実行することで実現しています。
logrotate.serviceは oneshotタイプなので一度実行した後は停止しています。
Ubuntuが起動したときにsystemdが timers.targetを通して logrotate.timer
を動かしています。
logrotate.timer は 定期的に logrotate.service をスタートさせます。

コード:

$ systemctl cat logrotate.service 
# /lib/systemd/system/logrotate.service
[Unit]
Description=Rotate log files
Documentation=man:logrotate(8) man:logrotate.conf(5)
ConditionACPower=true

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf

# performance options
Nice=19
IOSchedulingClass=best-effort
IOSchedulingPriority=7

# hardening options
#  details: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
#  no ProtectHome for userdir logs
#  no PrivateNetwork for mail deliviery
#  no ProtectKernelTunables for working SELinux with systemd older than 235
#  no MemoryDenyWriteExecute for gzip on i686
PrivateDevices=true
PrivateTmp=true
ProtectControlGroups=true
ProtectKernelModules=true
ProtectSystem=full
RestrictRealtime=true

コード:

$ systemctl cat logrotate.timer 
# /lib/systemd/system/logrotate.timer
[Unit]
Description=Daily rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=daily
AccuracySec=12h
Persistent=true

[Install]
WantedBy=timers.target

コード:

$ systemctl status logrotate.service 
● logrotate.service - Rotate log files
     Loaded: loaded (/lib/systemd/system/logrotate.service; static; vendor preset: enabled)
     Active: inactive (dead)
TriggeredBy: ● logrotate.timer
       Docs: man:logrotate(8)
             man:logrotate.conf(5)

コード:

$ systemctl status logrotate.timer
● logrotate.timer - Daily rotation of log files
     Loaded: loaded (/lib/systemd/system/logrotate.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Wed 2020-12-02 16:47:39 JST; 4h 32min ago
    Trigger: Thu 2020-12-03 01:47:28 JST; 4h 26min left
   Triggers: ● logrotate.service
       Docs: man:logrotate(8)
             man:logrotate.conf(5)

12月 02 16:47:39 focal systemd[1]: Started Daily rotation of log files.

コード:

$ systemctl list-dependencies logrotate.timer --reverse
logrotate.timer
● └─timers.target
●   └─basic.target
●     └─multi-user.target
●       └─graphical.target

コード:

$ systemctl list-timers --no-pager --full
NEXT                        LEFT          LAST                        PASSED        UNIT                         ACTIVATES                     
Thu 2020-12-03 00:55:50 JST 3h 30min left Tue 2020-12-01 00:53:25 JST 1 day 20h ago motd-news.timer              motd-news.service             
Thu 2020-12-03 01:47:28 JST 4h 21min left Tue 2020-12-01 00:00:20 JST 1 day 21h ago logrotate.timer              logrotate.service             
Thu 2020-12-03 01:47:28 JST 4h 21min left Tue 2020-12-01 00:00:20 JST 1 day 21h ago man-db.timer                 man-db.service                
Thu 2020-12-03 01:49:51 JST 4h 24min left Tue 2020-12-01 10:56:38 JST 1 day 10h ago anacron.timer                anacron.service               
Thu 2020-12-03 01:58:47 JST 4h 33min left Tue 2020-12-01 06:08:04 JST 1 day 15h ago apt-daily-upgrade.timer      apt-daily-upgrade.service     
Thu 2020-12-03 03:46:08 JST 6h left       Mon 2020-11-30 23:47:42 JST 1 day 21h ago apt-daily.timer              apt-daily.service             
Thu 2020-12-03 07:55:30 JST 10h left      Tue 2020-12-01 08:20:06 JST 1 day 13h ago fwupd-refresh.timer          fwupd-refresh.service         
Thu 2020-12-03 17:03:16 JST 19h left      Wed 2020-12-02 17:03:16 JST 4h 22min ago  systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Sun 2020-12-06 03:10:52 JST 3 days left   Sun 2020-11-29 03:11:18 JST 3 days ago    e2scrub_all.timer            e2scrub_all.service           
Mon 2020-12-07 00:00:00 JST 4 days left   Mon 2020-11-30 01:40:50 JST 2 days ago    fstrim.timer                 fstrim.service                

10 timers listed.
Pass --all to see loaded but inactive timers, too.

オフライン

 

#3 2020-12-04 21:25:57

elliptic
メンバ
登録日: 2020-03-05

Re: syslogのバックアップの仕組み

すみません。 私の返信した #1 は間違ってました
#1に書いたのは Ubuntu 20.04 LTSでの動作でしたが、 Ubuntu 16.04 LTSを調べたら
違う仕組みで動いてました。

Ubuntu 16.04 LTSでは systemd の利用がまだあまり進んでなく、anacronによって
logrotateを動かしてます。

* 下記のようなイベントで anacronが呼ばれます。
    Ubuntuを起動したとき
    サスペンドから復帰したとき
    時刻 07:30 になったとき
* anacronは日付をチェックして1日に1回 cron.dailyの ジョブを実行します。
* /etc/cron.daily/logrotate が ログファイルの置き換えを実行します。


コード:

$ find /lib/systemd -name *anacron* 
/lib/systemd/system/anacron-resume.service
/lib/systemd/system/anacron.service
$ find /etc/systemd -name *anacron* 
/etc/systemd/system/hibernate.target.wants/anacron-resume.service
/etc/systemd/system/hybrid-sleep.target.wants/anacron-resume.service
/etc/systemd/system/multi-user.target.wants/anacron.service
/etc/systemd/system/suspend.target.wants/anacron-resume.service

$ cat /etc/cron.d/anacron 
# /etc/cron.d/anacron: crontab entries for the anacron package

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

30 7    * * *   root    test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null

コード:

$ cat /etc/cron.daily/logrotate 
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

cron.daily のジョブが開始してから ログファイルが切り替えが行われ、
新しい方のログファイルに cron.dailyの終了が記録されます。

コード:

$ zgrep -Hn cron.daily /var/log/syslog.2.gz; grep -Hn cron.daily /var/log/syslog{.1,}
/var/log/syslog.2.gz:1:Feb 18 12:55:10 ubuntu anacron[895]: Job `cron.daily' terminated
/var/log/syslog.2.gz:158:May  6 13:42:01 ubuntu anacron[897]: Will run job `cron.daily' in 5 min.
/var/log/syslog.2.gz:1690:May  6 13:47:00 ubuntu anacron[897]: Job `cron.daily' started
/var/log/syslog.2.gz:1691:May  6 13:47:00 ubuntu anacron[2005]: Updated timestamp for job `cron.daily' to 2020-05-06
/var/log/syslog.1:2:May  6 13:47:57 ubuntu anacron[897]: Job `cron.daily' terminated
/var/log/syslog.1:184:Dec  4 13:52:04 ubuntu anacron[884]: Will run job `cron.daily' in 5 min.
/var/log/syslog.1:2107:Dec  4 14:09:59 ubuntu anacron[884]: Job `cron.daily' started
/var/log/syslog.1:2108:Dec  4 14:09:59 ubuntu anacron[2570]: Updated timestamp for job `cron.daily' to 2020-12-04
/var/log/syslog:93:Dec  4 14:10:52 ubuntu anacron[884]: Job `cron.daily' terminated

オフライン

 

#4 2020-12-04 21:32:31

elliptic
メンバ
登録日: 2020-03-05

Re: syslogのバックアップの仕組み

#3

elliptic による投稿:

すみません。 私の返信した #1 は間違ってました
#1に書いたのは Ubuntu 20.04 LTSでの動作でしたが、 Ubuntu 16.04 LTSを調べたら
違う仕組みで動いてました。

更に誤記。 #1と書いたのは #2の間違いです。

オフライン

 

Board footer

Powered by FluxBB