Як я можу запобігти заповненню 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 не писати цю інформацію в syslog кожен раз?


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 у syslog.
базовий6

16

Добре,

Вирішення мого питання:

змінити

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

до

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

всередині, /etc/syslog.confа потім перезапустіть syslog

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

  1. це не /var/log/syslogпереповнюється повідомленнями про крон
  2. Я все ще отримую повідомлення від cron (що приємно для усунення несправностей)
  3. логротат не дозволяє /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. Це не відповідь.
ntd

@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 є ""


Це ІМО - правильне рішення: не створювати запис журналу.
ntd

4

В Ubuntu 14.04.5 (і, можливо, в інших місцях) є rsyslogd замість syslogd. TranslucentCloud натякав на це з Debian Jessie, але таке ж рішення (але зміна rsyslog.conf замість syslogd.conf), схоже, не працює в Ubuntu.

Виявляється , що значення , встановлені в /etc/rsyslog.d/50-default.conf будуть фактично мати пріоритет над наборами речі в /etc/rsyslog.conf, так що краще зробити зміни там , а потім рестарт Rsyslog і хрон. В іншому випадку ви все одно закінчитесь із типовою поведінкою реєстрації 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

Я просто вирішив це по-іншому, але моя мета була трохи іншою. Я хотів відкинути записи журналу хронів, які були створені при запуску атруна, щоб мої жорсткі диски могли спати і не пробуджуватися кожні 5 хвилин.

Ви можете мати мета події журналу в syslog.conf бути командою оболонки, префіксуючи її трубою, і тому я використовував grep, щоб викинути ті, які я не хотів. Так:

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

Я не досліджував, але я вважаю, що слід мати можливість надсилати ці записи в журнал до іншої цілі, якщо вони все ще потрібні.


3

Насправді, найкраще рішення (можна було б стверджувати) - це комбінація того, що запропонував @DaveCheney, і того, що зробив user7321 , врешті-решт , та третьої дії, яку я рекомендував би:

  1. Захист syslogd від додавання повідомлень журналу, пов’язаних з кроном, до / var / log / syslog
  2. Забезпечення повідомлень журналу cron десь реєструється (зокрема, в / var / log / cron) + забезпечуючи обертання журналу журналу cron.
  3. Захист syslogd від додавання повідомлень журналу, пов’язаних з кроном, до / 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, тобто не створювати журнал в першу чергу.
ntd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.