$ sudo systemctl restart cron
でcronを再起動するのを忘れている。30 7-23 * * * root [ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi
となっていて、Anacronは7時から23時の30分に実行されるようになっている。
07:30にその日初めての実行が行われて、日次ジョブが動く。仮に、07:30の時点でシステムが止まってたら、08:30にリトライ、という動きなのかな。
7時から動くようになってるのを、3時から動くようにしたら期待通りの動きになるかな?
Anacron使ったことなかったから、全然知らなかった。Cronでいいんじゃないの?と思ったけど、実行時間にシステムが止まってたらリトライしてくれんのはちょっとメリットかも。START_HOURS_RANGE=3-22
を追加してみる。
この設定行、普通は最初からあるみたいだけど、このサーバはこの行の記載がなかった。$ ls -l /var/spool/anacron
total 12
-rw------- 1 root root 9 Jan 2 07:38 cron.daily
-rw------- 1 root root 9 Dec 26 21:18 cron.monthly
-rw------- 1 root root 9 Jan 2 07:43 cron.weekly
どこで実行時間が決まるんだろ?12 3 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
と設定されているが、test -x /usr/sbin/anacronの結果がtrueなので、結果として03:12に、/etc/cron.dailyは実行されない。
/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 3-23 * * * root [ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi
3時から23時の間の毎時30分に、anacronの実行を行う。syslogを見ても、そのように実行されているのが判る。
/etc/anacrontabの設定は以下。# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
START_HOURS_RANGE=3-22が設定されているので、システムが動いていれば3時には日次ジョブが実行されるはずなのだが。。。
他にも設定すべきところがあるのかな?FILES
/etc/anacrontab
Contains specifications of jobs. See anacrontab(5) for a complete description.
/var/spool/anacron
This directory is used by Anacron for storing timestamp files.
/lib/systemd/system/anacron.service
This file provides systemd service for anacron.
/lib/systemd/system/anacron.timer
This file provides systemd timer for anacron. Currently the service is triggered hourly through systemd timer.
という記述がある。
/lib/systemd/system/anacron.timerっていうファイルがあるのか。
中を見てみると、[Unit]
Description=Trigger anacron every hour
[Timer]
OnCalendar=*-*-* 07..23:30
RandomizedDelaySec=5m
Persistent=true
[Install]
WantedBy=timers.target
となってる。OnCalendar=*-*-* 07..23:30の設定があるから7時から動き始めるのか。ただ、Ubuntuでは、/lib/systemd/system/のファイルを直接変更しても、パッケージの更新で上書きされてしまうようなので、ちょっと変更方法を調べてみる。
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0598sudo systemctl edit anacron.timer
で、エディタが立ち上がるので、以下を入力。[Timer]
OnCalendar=
OnCalendar=*-*-* 03..23:30
RandomizedDelaySec=5m
Persistent=true
OnCalendar=で一回元の設定をクリアしてから03:00-23:30の設定を行う。また、RandomizedDelaySec、Persistentは元のファイルを同じ値を記述した。RandomizedDelaySec、Persistentは記述する必要はないのかな?
この方法だと、daemon-reloadは必要ないらしいけど、念のためdaemon-reloadを行っておく。$ sudo systemctl daemon-reload
これで明日、3時台に日次ジョブが実行されるんではないかと思う。