Как я могу предотвратить заполнение моего системного журнала cron?
У меня есть скрипт, который нужно выполнять каждую минуту. Проблема в том, что cron регистрируется в /var/log/syslog
каждый раз, когда он выполняется. Я в конечном итоге вижу что-то подобное повторяется снова и снова в /var/log/syslog
:
Jun 25 00:56:01 myhostname /USR/SBIN/CRON[1144]: (root) CMD (php /path/to/script.php > /dev/null)
Я использую Debian.
Мои вопросы: могу ли я сказать, что cron не должен каждый раз записывать эту информацию в системный журнал?
6 ответов
В порядке,
Решение моего вопроса было:
менять
*.*;auth,authpriv.none -/var/log/syslog
в
*.*;cron,auth,authpriv.none -/var/log/syslog
в /etc/syslog.conf
а затем перезапустите системный журнал
У меня также есть Cron отправляется /var/log/cron.log
по предложению Дейва Чейни и наклеил на него логротат. Мое исправление с предложением Daves является оптимальным для моей ситуации, потому что:
- это держит
/var/log/syslog
от того, чтобы быть загроможденным сообщениями cron - Я все еще получаю сообщения cron (что хорошо для устранения неполадок)
- Logrotate держит
/var/log/cron.log
от слишком большого.
Вы можете отправить вывод cron в отдельное средство регистрации, добавив следующее к вашему /etc/syslog.conf
файл:
# Log cron stuff
cron.* /var/log/cron
Не забудьте добавить /var/log/cron
на ваш /etc/logrotate.d/syslog
чтобы обеспечить его вращение, например,
# /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
Изменить /etc/default/cron
# Or, to log standard messages, plus jobs with exit status != 0:
# EXTRA_OPTS='-L 5'
#
# For quick reference, the currently available log levels are:
# 0 no logging (errors are logged regardless)
# 1 log start of jobs
# 2 log end of jobs
# 4 log jobs with exit status != 0
# 8 log the process identifier of child process (in all logs)
#
EXTRA_OPTS="-L 0"
По умолчанию строка EXTRA_OPTS равна ""
В Ubuntu 14.04.5 (и, вероятно, в другом месте) вместо syslogd есть rsyslogd. TranslucentCloud намекнул на это с Debian Jessie, но то же самое решение (но с заменой rsyslog.conf вместо syslogd.conf), похоже, не работает в Ubuntu.
Похоже, что значения, установленные в /etc/rsyslog.d/50-default.conf, на самом деле будут иметь приоритет над вещами, установленными в /etc/rsyslog.conf, поэтому лучше внести изменения там, а затем перезапустить rsyslog и cron. В противном случае вы все равно получите стандартное поведение ведения журнала cron в syslog, плюс ведение журнала cron в cronlog (но не исключительно).
Первые несколько строк в моем /etc/rsyslog.d/50-default.conf:
*.*;cron,auth,authpriv.none -/var/log/syslog
cron.* /var/log/cron.log
И вуаля!
На самом деле, "лучшее" (можно утверждать) решение - это сочетание того, что @DaveCheney предложил, и того, что в итоге сделал user7321, плюс третье действие, которое я бы порекомендовал:
- Запрет syslogd добавлять сообщения журнала, связанные с cron, в / var / log / syslog
- Обеспечение регистрации сообщений журнала cron где-нибудь (в частности, в /var/log/cron) + обеспечение ротации журнала для журнала cron.
- Предотвращение добавления syslogd сообщений журнала, связанных с cron, в / var / log / messages
В вашем /etc/syslog.conf
комбинация этих предложений меняет что-то вроде следующего:
*.*;cron,auth,authpriv.none -/var/log/syslog
auth,authpriv.none;daemon.none;mail,news.none -/var/log/messages
в:
cron.* /var/log/cron.log
*.*;cron,auth,authpriv.none -/var/log/syslog
auth,authpriv.none;cron,daemon.none;mail,news.none -/var/log/messages
И не забудьте принудительно перезагрузить (или перезапустить) сервисы cron и syslogd, например, используя:
/etc/init.d/syslogd force-reload
/etc/init.d/cron force-reload
Примечание: это работает и с rsyslogd.
Я просто решил это по-другому, но моя цель была немного другой. Я хотел отменить записи журнала cron, которые были сгенерированы при запуске atrun, чтобы мои жесткие диски могли спать и не просыпаться каждые 5 минут.
Вы можете иметь цель события журнала в syslog.conf быть командой оболочки, добавив префикс к каналу, и поэтому я использовал grep, чтобы выбросить те, которые мне не нужны. Так:
cron.* | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log
Я не исследовал, но я полагаю, что должна быть возможность отправить эти записи журнала другой цели, если они все еще нужны.