Классическая пятничная история: сервер перезагрузили в ночь, а «ежедневная» задача не запустилась и не запустится до утра. Разложить по полкам:
crontab -l | grep '@' # что вообще переживает reboot systemctl list-timers --all # что догоняет: NEXT / LAST / PASS
@reboot стартует в момент старта cron — сети ещё может не быть. Костыль
«@reboot sleep 60 && ...» работает до первого медленного DHCP. Честное решение —
таймер с After=network-online.target и Persistent=true, который догоняет
пропущенное сам.
У Persistent=true есть обратная сторона: после долгого простоя прилетает пачка
догонов. Для задачи «раз в сутки» это ок, для «раз в десять минут» — удар по диску. Считайте
пропущенные срабатывания.
И мелочь, которая экономит нервы: RandomizedDelaySec=5m — иначе десять машин
с одним кронтэйром бьют в прод на ровном месте ровно в 3:00.