Вопрос или проблема
Месяц назад я настроил 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
, возможно, стоит проверить, нет ли системных ограничений или конфликтов с другими службами. Если у вас остались дополнительные вопросы или проблемы, пожалуйста, обновите информацию, и мы поможем вам разобраться.