さくらVPSでUbuntu20.04 LTSのサーバを構築したら、anacronが追加でインストールされた状態だった。日次ジョブが、朝7時台に実行されるので、3時台に変更しようとしたら思ったより難しかった。
苦闘の記録は以下。
https://treewoods.net/kugelblitz/article/A21122919254400000000680
結論として、以下を変更する必要がある。
・/etc/cron.d/anacron
・/lib/systemd/system/anacron.timer
/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-23 * * * root [ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi
30 7-23 * * *のところを、30 3-23 * * *に変更する必要がある。
/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を、OnCalendar=*-*-* 03..23:30に変更する必要があるのだが/lib/systemd/system/anacron.timerを直接変更しても、anacronの更新でもとに戻ってしまう可能性があるため、
sudo systemctl edit anacron.timer
でエディタがひらくので、
[Timer]
OnCalendar=
OnCalendar=*-*-* 03..23:30
RandomizedDelaySec=5m
Persistent=true
を追記。daemon-reloadは必要ないらしいけど、念のためdaemon-reloadを行っておく。
$ sudo systemctl daemon-reload
anacron、インストールされていたから使ってみたけど、このサーバだとcronでいいような気がする。anacronは、cronと違って、実行時間にサーバが停止していても、サーバ起動後に再実行してくれる点と、実行時間をランダムに遅延してくれる点があるんだけど、どちらもこのサーバだと特にメリットないんだよね。大規模なシステムならメリットもあるのかもしれないけど、「実行時間にサーバが停止していても、サーバ起動後に再実行してくれる」って逆にあぶなくないですかね?大規模なシステムだと、夜間ジョブのスケジュールもタイトに組まれているので、もし夜間ジョブが実行されなかったら手動でリカバリしないと、他の動作に影響しそうではある。