Я хочу знать, как я могу точно видеть, что задания cron делают при каждом выполнении. Где находятся файлы журналов? Или я могу отправить вывод на мою электронную почту? Я установил адрес электронной почты для отправки журнала при выполнении задания cron, но пока ничего не получил.
220
Ответы:
запишет весь вывод задания cron в /var/log/myjob.log
Вы можете использовать
mail
для отправки электронных писем. Большинство систем отправляют необработанныеcron
выходные данные по электронной почте пользователю root или соответствующему пользователю.источник
2>&1
: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21stderr
иstdout
в журнале,2>&1
после косвенного обращения должен прийти:myjob.sh >> /var/log/myjob.log 2>&1
YYYY-MM-DD_hh-mm-sec
в выходной файл имя, чтобы каждое имя файла отличалось и сохранялось без перезаписи?date +\%Y\%m\%d\%H\%M\%S
-cron.log 2> & 1По умолчанию cron регистрирует в / var / log / syslog, чтобы вы могли видеть записи, связанные с cron, используя:
/ubuntu/56683/where-is-the-cron-crontab-log
источник
journalctl | grep cron
в системных системах/var/log/cron
на AWS Linux AMI.sudo journalctl -u cron
cron
регистрируется, очень зависит от системы. Есть отдельный ответ с подробностями о том, как настраиваются различные места назначения журналирования в системах Linux (или, точнее, в системах, которые используютsyslog
). Другие системы могут иметь другой способ настройки этих вещей.Вот мой код:
источник
>>
добавляет и2>&1
говорит отправить стандартную ошибку в то же место, что и стандартный вывод.Существует как минимум три различных типа регистрации:
Ведение журнала ДО выполнения программы, которое регистрирует только ЕСЛИ cronjob TRIED для выполнения команды. Этот файл находится в / var / log / syslog, как уже упоминалось @Matthew Lock.
Регистрация ошибок ПОСЛЕ выполнения программы, которую можно отправить по электронной почте или в файл, как указано @Spliffster. Я предпочитаю вход в файл, потому что с электронной почтой ТОГДА у вас НОВЫЙ источник проблем, и он проверяет, работает ли отправка и прием электронной почты безупречно. Иногда это так, иногда нет. Например, на простом обычном настольном компьютере, в котором вы не заинтересованы в настройке smtp, иногда вы предпочитаете входить в файл:
Есть несколько распространенных источников проблем с cronjobs: * ABSOLUTE PATH исполняемого файла. Когда вы запускаете его из своей оболочки, он может работать, но процесс cron, похоже, использует другую среду, и, следовательно, он не всегда находит двоичные файлы, если вы не используете абсолютный путь. * БИБЛИОТЕКИ, используемые двоичным файлом. Это более или менее аналогично предыдущему пункту, но убедитесь, что, если просто указать имя команды, то оно относится именно к двоичному файлу, который использует ту же библиотеку, или, что лучше, проверить, что двоичный файл, на который вы ссылаетесь, использует абсолютный путь это то же самое, что вы упоминаете, когда вы используете консоль напрямую. Двоичные файлы можно найти с помощью команды locate, например:
Убедитесь, что двоичный файл, на который вы будете ссылаться, является тем же самым двоичным файлом, который вы вызываете в своей оболочке, или просто протестируйте снова в своей оболочке, используя абсолютный путь, который вы планируете ввести в cronjob.
источник
В Ubuntu вы можете включить
cron.log
файл, содержащий только записи CRON.Раскомментируйте строку, которая упоминается
cron
в/etc/rsyslog.d/50-default.conf
файле:Сохраните и закройте файл, а затем перезапустите
rsyslog
службу:Теперь вы можете увидеть записи журнала cron в своем собственном файле:
Пример выходов:
Тем не менее, вы не увидите больше информации о том, какие сценарии были на самом деле запущены
/etc/cron.daily
или внутри/etc/cron.hourly
, если эти сценарии не перенаправят вывод в cron.log (или, возможно, в какой-либо другой файл журнала).Если вы хотите проверить, работает ли crontab и не нужно искать его в
cron.log
илиsyslog
, создайте crontab, который перенаправляет вывод в файл журнала по вашему выбору - что-то вроде:Шаги, взятые из: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/
источник
cron
уже отправляет стандартный вывод и стандартную ошибку каждого запускаемого по почте владельцу задания cron.Вы можете использовать
MAILTO=recipient
вcrontab
файле, чтобы электронные письма отправлялись на другую учетную запись.Чтобы это работало, вам нужно, чтобы почта работала правильно. Доставка в локальный почтовый ящик обычно не является проблемой (на самом деле, шансы
ls -l "$MAIL"
что вы обнаружите, что вы уже получили некоторые), но чтобы получить его из коробки и выйти в Интернет, требуется MTA (Postfix, Sendmail, что у вас) быть правильно настроенным для подключения к миру.Если нет вывода, электронное письмо не будет сгенерировано.
Распространенным условием является перенаправление вывода в файл, и в этом случае, конечно, демон cron не увидит, что задание вернет какой-либо вывод. Один из вариантов - перенаправить стандартный вывод в файл (или написать сценарий, чтобы он никогда ничего не печатал - возможно, он вместо этого сохраняет результаты в базе данных или выполняет задачи обслуживания, которые просто ничего не выводят?) И получает электронное письмо только при наличии это сообщение об ошибке
Чтобы перенаправить оба выходных потока, синтаксис
Обратите внимание на то, как мы добавляем (удваиваем
>>
) вместо перезаписи, чтобы вывод любого предыдущего задания не заменялся выводом следующего.Как предлагается во многих ответах, вы можете отправить оба выходных потока в один файл; замените второе перенаправление
2>&1
на «стандартная ошибка должна идти везде, где идет стандартный вывод». (Но я не особо одобряю эту практику. Это в основном имеет смысл, если вы ничего не ожидаете от стандартного вывода, но, возможно, что-то упустили, возможно, из внешнего инструмента, который вызывается из вашего скрипта.)cron
задания выполняются в вашем домашнем каталоге, поэтому любые относительные имена файлов должны быть относительно этого. Если вы хотите писать вне вашей домашней директории, вам, очевидно, нужно отдельно убедиться, что у вас есть права на запись в этот целевой файл.Обычным антипаттерном является перенаправление всего
/dev/null
(а затем запросить переполнение стека, чтобы помочь вам выяснить, что пошло не так, когда что-то не работает; но мы также не можем увидеть потерянный вывод!)Внутри вашего скрипта убедитесь, что регулярный вывод (фактические результаты, в идеале в машиночитаемой форме) и диагностика (обычно отформатированные для читателя-человека) разделены. В сценарии оболочки
Некоторые платформы (например, GNU Awk) позволяют использовать имя файла
/dev/stderr
для сообщений об ошибках, но это не всегда переносимо; в Perlwarn
иdie
печатать со стандартной ошибкой; в Python пишитеsys.stderr
или используйтеlogging
; в Ruby попробуй$stderr.puts
. Обратите также внимание на то, как сообщения об ошибках должны включать имя сценария, который выдал диагностическое сообщение.источник
Если вы запускаете какую-то команду с помощью sudo, она этого не допустит. Судо нужен Tty.
источник
sudo
конфигурации. Вещи, которые должны работать без указания пароля, должны быть настроеныNOPASSWD:
в вашейsudoers
конфигурации.Когда вы укажете действительный адрес электронной почты, вы получите вывод выполненного задания cron. Таким образом, вы сможете проверить это и убедиться, что все было выполнено правильно. Обратите внимание, что вы не получите электронное письмо, если нет результатов команды cron job.
Пожалуйста, имейте в виду, что вы получите электронное письмо для каждого из выполненных заданий cron. Это может затопить ваш почтовый ящик в случае, если ваши кроны бегут слишком часто
источник