Где находится журнал cron / crontab?

755

Я хочу убедиться, что моя работа cron выполняется и в какое время. Я считаю, что есть журнал для моей sudo crontab -eработы, но где?

Я искал в Google и нашел рекомендации для поиска /var/log(в котором я ничего не вижу с «cron» в названии) и для редактирования файла, /etc/syslog.confкоторого у меня тоже нет.

Скотт Шреттер
источник

Ответы:

900

При установке по умолчанию задания cron регистрируются в

/var/log/syslog

Вы можете увидеть только задания cron в этом лог-файле, запустив

 grep CRON /var/log/syslog

Если вы ничего не перенастроили, записи будут там.

Ричард Холлоуэй
источник
46
Если MTA не установлен, cron просто выбрасывает вывод задания.
Барри Келли
11
Журнал cron может находиться в другом файле в /var/log/каталоге. Проверьте cron.log или эквивалентный.
Навигатрон
4
это не дает мне выход из работы. он просто дает общее сообщение о том, что cron был обработан.
Чови
2
на AWS это было / var / log / cron
tsukimi
5
@shadi вы также grep -i CRONможете искать без
учета
237

Вы можете создать файл cron.log, содержащий только записи CRON, которые отображаются в системном журнале. Обратите внимание, что задания CRON по-прежнему будут отображаться в системном журнале, если вы будете следовать следующим указаниям.

Открыть файл

/etc/rsyslog.d/50-default.conf

Найдите строку, которая начинается с:

#cron.*

раскомментируйте эту строку, сохраните файл и перезапустите rsyslog:

sudo service rsyslog restart

Теперь вы должны увидеть файл журнала cron:

/var/log/cron.log

Активность Cron теперь будет регистрироваться в этом файле (в дополнение к syslog).

Обратите внимание, что в cron.log вы увидите записи о том, когда cron запускал скрипты в /etc/cron.hourly, cron.daily и т. Д. - например, что-то вроде:

Apr 12 14:17:01 cd CRON[14368]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Однако вы не увидите больше информации о том, какие сценарии фактически выполнялись внутри /etc/cron.daily или /etc/cron.hourly, если только эти сценарии не направляют вывод в cron.log (или, возможно, в какой-либо другой файл журнала).

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

01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1

Это перенаправит все стандартные выходные данные и ошибки, которые могут возникнуть в сценарии, который выполняется, в указанный файл журнала.

user12345
источник
1
На мой взгляд, этот ответ лучше в будущем. Таким образом, ваш файл системного журнала более понятен.
ShgnInc
9
Чтобы также исключить журнал cron из системного журнала, вы можете изменить строку *.*;auth,authpriv.none -/var/log/syslogна *.*;auth,authpriv.none,cron.none -/var/log/syslog.
Коен.
На нашей CentOS 6 cron. * Определен в /etc/rsyslog.conf, тогда как я пуст в папке rsyslog.d.
Скотт Чу
что 2>&1означает?
Джон Джо
2
@JohnJoe 2> & 1 используется для пересылки stderr в stdout, таким образом вы также получите stderr в файл журнала.
Сампо Саррала
79

Иногда может быть полезно постоянно следить за этим, в этом случае:

tail -f /var/log/syslog | grep CRON
KennyCason
источник
10
Ну, вы, вероятно, захотите использовать -F, который будет следовать за файлом при смене имени, так что, когда он будет усечен / перемещен, например /var/log/syslog.1.gz, вы все еще будете следовать текущему /var/log/syslogфайлу. По tail xxxx -f --retry
словам
37

Вы также можете направить вывод отдельных cronjobs в их собственные журналы для лучшей читаемости, вам просто нужно где-то добавить вывод даты.

 0 15 * * *    /home/andrew/daily-backup.sh >> /var/log/daily-backup.log 2>&1
Эндрю Мейер
источник
4
Значение true, но если эта строка не запускается из-за синтаксической ошибки, в указанный выходной журнал ничего не будет записано.
Хищник
11
Вы можете решить эту проблему, добавив 2> & 1 после указания файла журнала. Также рекомендуется проверять ваши cronjobs перед их добавлением в crontab, а затем присутствовать для первого запланированного запуска, чтобы убедиться, что crontab правильно отформатирован.
Эндрю Мейер
10

Если вы systemdустановили в своей системе, вы можете отобразить журнал заданий cron с помощью journalctlкоманды.

Например, на моем Ubuntu 17.10:

journalctl -u cron.service
an9wer
источник
9

Это очень старый вопрос, но ни один из этих ответов не кажется удовлетворительным.

Сначала заставляйте свою задачу cron запускаться каждую минуту, затем запускайте cron как не-демон (временно, просто убейте любой crond, который, возможно, уже был запущен) с тестовой регистрацией:

crond -nx test

И посмотрите журнал выполнения вашей программы, проходящий через ваш терминал.

Тристан Маат
источник
7
Не запускается 14.04 -No command 'crond' found, did you mean: Command 'cron' from package 'cron' (main)
G-.
8

Это /var/log/syslogпо умолчанию.

Но его можно настроить для создания отдельного cron.log, что более полезно.

Этот Q & A описывает процесс:

16.04: Как заставить cron создать cron.log и отслеживать его в режиме реального времени?

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

Как изменить уровень журнала cron?

в нем показано, как изменить уровень журнала, включив в него больше, чем просто начало заданий - уровень 15 также покажет ошибки и время окончания.

SDsolar
источник
5

Fedoar 29 и RHEL 7

journalctl -t CROND

Из journalctlруководства:

   -t, --identifier=SYSLOG_IDENTIFIER|PATTERN
       Show messages for the specified syslog identifier SYSLOG_IDENTIFIER, or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.

       This parameter can be specified multiple times.
HarlemSquirrel
источник
3

Вы можете перенаправить вывод cron в файл tmp

Например: 00 11 07 * * / bin / bash /home/ubuntu/command.sh> / tmp / output 2> & 1

Ошибка и нормальный вывод, оба будут перенаправлены в один и тот же файл

Himanshu
источник
2

Как упоминалось ранее, задания cron регистрируются в /var/log/syslog

Вы можете передать системный журнал в grep и отфильтровать журналы CRON, как это

less /var/log/syslog | grep CRON 

Вы можете искать через ваши журналы crontab, как это

less /var/log/syslog | grep CRON | grep <search-keyword-comes-here>

Вы можете искать в журналах истории crontab, хранящихся в файлах gz, например

less /var/log/syslog.2.gz | grep CRON | grep <search-keyword-comes-here>

Всегда полезно иметь механизм регистрации, вы можете быстро настроить ELK для своих серверов, вы также можете поэкспериментировать с logz .

нуль
источник