Как я могу предотвратить заполнение моего системного журнала cron?


32

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


1
Есть идеи, как это сделать на платформе Busybox? Формат /etc/syslog.conf отличается ...
Марк Лаката

Ответы:


25

Вы можете отправить вывод 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
}

Спасибо за вклад. Я добавил cron. * / Var / log / cron и перезапустил cron, но он продолжает сбрасывать сообщения в / var / log / syslog, оставляя / var / log / cron пустым. не уверен, почему он ничего не делает
user7321

1
о человек, эпическая неудача с моей стороны. Я редактировал syslog.conf и перезапускал cron! Не удивительно, что это не сработает .. Я должен был перезапустить syslog =)
user7321

1
Включение cron.log не препятствует записи сообщений cron в системный журнал.
basic6

16

В порядке,

Решение моего вопроса было:

менять

*.*;auth,authpriv.none     -/var/log/syslog

в

*.*;cron,auth,authpriv.none     -/var/log/syslog

внутри, /etc/syslog.confа затем перезапустите системный журнал

У меня также есть cron, отправленный в /var/log/cron.logсоответствии с предложением Дейва Чейни, и он прикрепил логротат. Мое исправление с предложением Daves является оптимальным для моей ситуации, потому что:

  1. это не мешает /var/log/syslogсообщениям cron
  2. Я все еще получаю сообщения cron (что хорошо для устранения неполадок)
  3. logrotate удерживает /var/log/cron.logслишком большой размер .

7
Для тех, кто интересуется современными системами, rsyslogв Debian 8.0 есть Jessie, поэтому его /etc/rsyslog.confнужно редактировать. Кстати, добавляемые строки уже есть по умолчанию, нужно просто раскомментировать их (строка 63). И /var/log/cron.logуже в /etc/logrotate.d/syslog, так же, как сопровождающие пакета прочитали эту ветку.
TranslucentCloud

Ваш вопрос был Is there any way I can tell cron not write this information to syslog every time. Это не ответ.
ндт

@TranslucentCloud Просто хотел добавить, что моя конфигурация rsyslog на Ubuntu 14 LTS была в /etc/rsyslog.d/50-default.conf.
Джонни

8

Изменить / 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 равна ""


Это IMO - правильное решение: не генерируйте запись журнала.
ндт

4

В 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

И вуаля!


1
Очень хороший ответ. Тем не менее, вы можете сосредоточиться на новых вопросах для будущего участия в Stack Overflow, так как этот вопрос очень старый.
Магеллан

3

Я просто решил это по-другому, но моя цель была немного другой. Я хотел отменить записи журнала cron, которые были сгенерированы при запуске atrun, чтобы мои жесткие диски могли спать и не просыпаться каждые 5 минут.

Вы можете иметь цель события журнала в syslog.conf быть командой оболочки, добавив префикс к каналу, и поэтому я использовал grep, чтобы выбросить те, которые мне не нужны. Так:

cron.*              | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log

Я не исследовал, но я полагаю, что должна быть возможность отправить эти записи журнала другой цели, если они все еще нужны.


3

На самом деле, «лучшее» (можно утверждать) решение - это сочетание того, что @DaveCheney предложил, и того, что в итоге сделал user7321 , плюс третье действие, которое я бы порекомендовал:

  1. Запрет syslogd добавлять сообщения журнала, связанные с cron, в / var / log / syslog
  2. Обеспечение регистрации сообщений журнала cron где-нибудь (в частности, в / var / log / cron) + обеспечение ротации журнала для журнала cron.
  3. Предотвращение добавления 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.


Лучшее решение - то, что предложил @dfc, то есть не создавайте журнал в первую очередь.
ндт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.