Cron перестал записывать в /var/log/cron.log

Вопрос или проблема

Месяц назад я настроил cron для ведения журналов в /var/log/cron.log, изменив /etc/rsyslog.d/50-default.conf. Ведение журналов работало отлично, пока я не изменил права доступа к /var/log (ослабив ограничения на доступ) и не заставил logrotate ротировать журналы, выполнив logrotate --force /etc/rsyslog.d/50-default.conf. С тех пор cron, похоже, перестал вести журналы. Файл /var/log/cron.log больше не существует. Я выполнил sudo touch /var/log/cron.log, чтобы создать его, но он остался пустым.

Больше деталей о том, что я сделал с правами доступа:

Я выполнил sudo chmod 775 /var/log, а затем изменил права обратно на sudo chmod 755 /var/log. Все остальные службы, похоже, ведут журналы правильно, и задания cron на самом деле выполняются (это проверено с помощью ps aux | grep rsync, так как я запускаю rsync только через cron).

Я не был уверен в правильных правах доступа для пользователя и группы для cron.log, поэтому попробовал изменить его на syslog:adm, как у большинства других файлы журналов, но это не помогло, поэтому я вернул его обратно на root:root.

Текущие права на cron.log: -rwxr-xr-x 1 root root 0 Apr 27 16:34 cron.log

Не знаю, что делать дальше. Я знаю, что могу направить cron на ведение журналов в любой файл по своему выбору (либо добавив >> /path/to/logfile в конец записей cron job, либо изменив /etc/rsyslog.d/50-default.conf), но для последовательности я предпочел бы, чтобы он продолжал вести журнал в cron.log. Я полагаю, что мог бы добавить >> /var/log/cron.log в конец каждой записи cron, но это кажется мне немного неаккуратным.

ИЗМЕНЕНИЕ: Согласно моему комментарию ниже, я изменил местоположение журнала на /tmp/cron.log, и ведение журналов возобновилось. Сначала я предположил, что это означало, что либо права на папку, либо на файл неверны. Однако я проверил их на другой машине с той же дистрибуцией, и права на папку были правильными. Права на файл были недостаточно ограничительными, правильные права можно задать с помощью sudo chmod 640 cron.log.

Для теста я удалил пустой cron.log, но он никогда не был воссоздан. Я изменил конфигурацию rsyslogd, чтобы он вел журнал в crond.log, но файл никогда не был создан.

Почему вы не попытались отредактировать /etc/rsyslog.conf? Вы знаете, что можете заставить rsyslog вести журнал сервиса, у которого нет конкретного логгера. Поэтому я предлагаю прочитать man rsyslog.conf, чтобы узнать, как заставить сервис вести журналы, и отредактировать сервис, чтобы отправить журналы сюда (отредактировать что-то вроде /etc/init.d/rsyslog, чтобы настроить раздел журналов).

Ответ или решение

Проблема с отсутствием логирования cron в файле /var/log/cron.log может быть вызвана несколькими факторами, особенно после изменения прав доступа к каталогу /var/log и его содержимому. Давайте рассмотрим шаги для диагностики и решения этой проблемы.

1. Проверка конфигурации rsyslog

Поскольку вы изменили конфигурацию в файле /etc/rsyslog.d/50-default.conf, убедитесь, что в этом файле есть соответствующие записи для логирования cron. Обычно это выглядит так:

# Log cron
cron.* /var/log/cron.log

Если этой строки нет, добавьте её. После внесения изменений вам нужно перезапустить службу rsyslog:

sudo systemctl restart rsyslog

Или для систем с init.d:

sudo service rsyslog restart

2. Проверка прав доступа

Вы упомянули, что изменяли права каталога /var/log. Убедитесь, что права доступа на этот каталог установлены правильно. Рекомендуемые права:

sudo chmod 755 /var/log

Также проверьте права на файл /var/log/cron.log. Стандартные права для этого файла могут выглядеть следующим образом:

sudo chown syslog:adm /var/log/cron.log
sudo chmod 640 /var/log/cron.log

3. Проверка статуса службы Cron

Убедитесь, что служба cron работает корректно. Это можно сделать с помощью следующей команды:

sudo systemctl status cron

Если служба не работает, попробуйте её перезапустить:

sudo systemctl restart cron

4. Логи rsyslog

Проверьте логи rsyslog, чтобы найти возможные ошибки. Логи могут находиться в /var/log/syslog или в других файлах в зависимости от конфигурации:

tail -f /var/log/syslog

Или:

tail -f /var/log/messages

5. Тестирование изменений

После настройки и перезапуска служб выполните простую задачу через cron, чтобы проверить, записывается ли она в /var/log/cron.log. Например, добавьте следующее задание в crontab с помощью:

crontab -e

И добавьте строку:

* * * * * echo "Cron is working" >> /tmp/test.log

Затем проверьте, появляется ли это сообщение в /var/log/cron.log.

6. Альтернативные пути

Если проблема не решается, вы можете временно настроить логирование через другие файлы, как вы упомянули с /tmp/cron.log. Но это больше может служить временным решением, пока не установите, почему именно не работает логирование.

Также вы можете рассмотреть возможность редактирования файла /etc/rsyslog.conf, чтобы увидеть, не требуется ли указание дополнительных параметров для сервиса cron. Иногда необходимо явно указать именно службу, ответственную за cron:

Заключение

Если после выполнения всех указанных действий cron все ещё не ведет логирование в cron.log, возможно, стоит проверить, нет ли системных ограничений или конфликтов с другими службами. Если у вас остались дополнительные вопросы или проблемы, пожалуйста, обновите информацию, и мы поможем вам разобраться.

Оцените материал
Добавить комментарий

Капча загружается...