Как я могу просмотреть результаты моей работы cron?


Ответы:


66

Проверьте, имеют ли программы, которые вы запускаете с помощью cron, свои собственные файлы журналов. Если они не записывают свои выходные данные на стандартные выходные данные, вы можете перенаправить их в файлы или отправить вам по почте. Внутри crontabs работает стандартное перенаправление оболочки .

Например, чтобы перенаправить вывод ошибок some_job.shв some_job.errи выбросить стандартный вывод (т.е. отправить его /dev/null), добавьте следующее перенаправление в ваш crontab

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err

или отправить его вам по почте (если mailесть)

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" you@example.org

Так я всегда решал свои проблемы с хронами.
физик Майкл

Это второй пример правильно? Разве это не перенаправило бы все /dev/null?
Тимммм

7
@Timmmm: я работаю. Сначала он перенаправляет все some_job.shс sdout на stdr /dev/nullи только после него на stdr в stdout (который теперь сам больше ничего не содержит). Таким образом, только его stderr попадает в stdout и передается mail.
Бенджамин Банье

9

Большинство демонов cron на платформах, с которыми я работал, автоматически отправляют по электронной почте stdout / stderr пользовательских заданий cron пользователю, из чьего crontab пришло задание. Я забыл, что происходит с общесистемными (не зависящие от пользователя задания cron из / etc / crontab). Дело в том, что люди больше не всегда устанавливают демон почтовой программы (то есть агента передачи почты (MTA), такого как sendmail, qmail или postfix) в большинстве Unix-подобных ОС. Таким образом, выходные письма хрон просто умереть в локальную папку почты золотника где - то , если они даже получить , что далеко. Поэтому одним из ответов может быть только запуск вашего почтового демона, и, возможно, убедитесь, что у вас есть файл ~ / .forward для пересылки вашей локальной почты на вашу «реальную» учетную запись электронной почты.

Если вы хотите, чтобы ваши задания записывались в определенные файлы журналов, вы можете использовать стандартное перенаправление вывода, как предложено @honk, или, предположив, что ваше задание cron является сценарием оболочки, вы можете использовать свой скрипт call logger (1) или syslog (1) или любой другой инструмент командной строки, который ваша ОС предоставляет для отправки произвольных сообщений в системный журнал. Затем вы могли бы использовать встроенные методы вашей ОС для настройки того, какие типы сообщений будут регистрироваться, где, возможно, путем редактирования /etc/syslog.conf.

Большинство моих заданий cron вызывают скрипты bash, которые я написал специально для того, чтобы их запускал cron по определенной причине. В них, особенно когда я изначально пишу и отлаживаю их, мне нравится использовать bash "set -vx", чтобы заставить нерасширенную и развернутую форму каждой строки сценария сценария записываться в stdout до его выполнения. Обратите внимание, что сценарии оболочки, запускаемые из cron, считаются неинтерактивными, неинтерактивными оболочками, поэтому ваши стандартные сценарии запуска оболочки, такие как .bashrc и .profile, не запускаются. Если вы используете bash и хотите, чтобы bash запускал скрипт запуска, вы должны определить переменную окружения "BASH_ENV = / path / to / my / startup / script" в вашем crontab перед строкой, в которой вы определяете задание.


3
Это верно. Можно использовать mailкоманду для чтения сообщений из командной строки. Или посмотрите на /var/spool/mail. Но если вы установили postfix или другой почтовый модуль, отличный от стандартного sendmail, необходим другой способ чтения сообщений.
Акостадинов

Зачем нам нужен агент почтовой службы именно для этого? mail -s "cron output" test@example.comработает просто отлично: /
Мартин

В CentOS мой вывод cron отправляется по почте в / var / spool / mail. Посмотрите его, запустив, less $MAILесли вы хотите увидеть вывод cron для текущего пользователя или less /var/spool/mail/rootесли вы хотите увидеть вывод cron для команд, выполняющихся от имени пользователя root.
Sffc

5

Задачи, которые выполняет cron, отвечают за их собственную регистрацию.


2

Самый простой способ - зафиксировать ошибки печати и сохранить их в файле. У меня есть cronjob, который вызывает командную строку php, например:

1 0 * * * php /pathOfMyApp/index.php controllerName имя_функции> / pathOfMyApp / log / myErrorLog 2> & 1

Часть до «>» - это мой cronjob, а после «>» - захват и сохранение в файл, расположенный в папке журнала в корне моего проекта, но может быть в нужном вам месте. Будьте внимательны: при каждом вызове cronjob он перезаписывает последний журнал. Вы можете использовать «>>» для записи в конец существующего файла или поиска терминальной команды «cat».

Если ваш crontab использует 'curl' или 'wget' и ссылается на ссылку, вы можете выполнить поиск в / var / log / httpd / appName для access-log, если cron возвращает 500 или 400, должно быть что-то не так.

Наконец, вы также можете проверить / var / log / messages.


1

Я думаю, что перенаправление внутри cron-файла может быть не лучшим вариантом в этом случае.

Часто требуется, чтобы спецификация ведения журнала совмещалась со сценарием задания cron. В этом случае я предлагаю следующее:

#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>

Это добавляет вывод из задания cron в файл capture-log.txt.


1

Я предпочитаю получать отчеты по электронной почте о работе cron. Просто положи

MAILTO=yourmail@domain.com

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


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