
У меня есть следующая запись в моем /etc/crontab
файле, чтобы гарантировать, что ежедневные cronjobs запускаются в 4:25 утра. Это единственная запись для daily
внутри этого файла:
25 4 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
Содержимое моего /etc/cron.daily/
включает в себя logrotate
:
# ls -l /etc/cron.daily/
...
-rwxr-xr-x 1 root root 377 Jan 21 2019 logrotate
Вот конфигурация logrotate/etc/logrotate.d/
/var/log/remote/custom/*.log
{
rotate 180
daily
missingok
notifempty
compress
delaycompress
sharedscripts
# force rsyslog to refresh file descriptor
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
Почему при проверке содержимого /var/lib/logrotate/status
я вижу, что ротация лог-файла происходит в полночь, а не в 4:25 утра?
"/var/log/remote/custom/cust.log" 2020-11-4-0:0:39
Операционная система: Ubuntu 20.04 LTS
Ядро:Linux 5.4.0-40-generic
решение1
Похоже, вы пропустили /etc/anacrontab, где anacron определяет, когда следует оценивать /etc/cron.daily (и другие).
Также, это одна из многих причин, по которым я избегаю systemd. Проверьте первые строки /etc/cron.daily/logrotate:
# less -X /etc/cron.daily/logrotate
#!/bin/sh
# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
exit 0
fi
решение2
ДляДебианпользователи, вы можете подумать, что он работает на 6.25 (/etc/crontab), но с последних нескольких версий он работает на 00.00 и настроен насистемд!
Старый /etc/crontab:
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
Если вы хотите изменить время выполнения systemd, вам необходимо отредактировать этот файл: /etc/systemd/system/timers.target.wants/logrotate.timer
по умолчанию это:
[Timer]
OnCalendar=daily
Если вы хотите запускать его в 6.20 каждый день:
[Timer]
OnCalendar=*-*-* 6:20
(затем я перезагрузил систему, но не уверен, что это необходимо!)
решение3
Будьте ОЧЕНЬ ОСТОРОЖНЫ при редактировании /etc/systemd/system/timers.target.wants/logrotate.timer
— этот файл является символической ссылкой на /lib/systemd/system/logrotate.timer
.
Таймер будет проигнорирован, если файл случайно изменен с символической ссылки на обычный файл, что и произойдет, если вы отредактируете этот файл, используя (например) sed как часть установочного скрипта для встроенной системы. Спросите меня, откуда я знаю!