Проверьте, имеют ли программы, которые вы запускаете с помощью cron, свои собственные файлы журналов. Если они не записывают свои выходные данные на стандартные выходные данные, вы можете перенаправить их в файлы или отправить вам по почте. Внутри crontabs работает стандартное перенаправление оболочки .
Например, чтобы перенаправить вывод ошибок some_job.shв some_job.errи выбросить стандартный вывод (т.е. отправить его /dev/null), добавьте следующее перенаправление в ваш crontab
Это второй пример правильно? Разве это не перенаправило бы все /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 перед строкой, в которой вы определяете задание.
Это верно. Можно использовать 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, отвечают за их собственную регистрацию.
Часть до «>» - это мой cronjob, а после «>» - захват и сохранение в файл, расположенный в папке журнала в корне моего проекта, но может быть в нужном вам месте. Будьте внимательны: при каждом вызове cronjob он перезаписывает последний журнал. Вы можете использовать «>>» для записи в конец существующего файла или поиска терминальной команды «cat».
Если ваш crontab использует 'curl' или 'wget' и ссылается на ссылку, вы можете выполнить поиск в / var / log / httpd / appName для access-log, если cron возвращает 500 или 400, должно быть что-то не так.
Наконец, вы также можете проверить / var / log / messages.
Я считаю, что это часто легче всего включать и выключать для отладки. Я обычно просто использую имя пользователя @ localhost для адреса электронной почты.
Ответы:
Проверьте, имеют ли программы, которые вы запускаете с помощью cron, свои собственные файлы журналов. Если они не записывают свои выходные данные на стандартные выходные данные, вы можете перенаправить их в файлы или отправить вам по почте. Внутри crontabs работает стандартное перенаправление оболочки .
Например, чтобы перенаправить вывод ошибок
some_job.sh
вsome_job.err
и выбросить стандартный вывод (т.е. отправить его/dev/null
), добавьте следующее перенаправление в ваш crontabили отправить его вам по почте (если
mail
есть)источник
/dev/null
?some_job.sh
с sdout на stdr/dev/null
и только после него на stdr в stdout (который теперь сам больше ничего не содержит). Таким образом, только его stderr попадает в stdout и передаетсяmail
.Большинство демонов 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 перед строкой, в которой вы определяете задание.
источник
mail
команду для чтения сообщений из командной строки. Или посмотрите на/var/spool/mail
. Но если вы установили postfix или другой почтовый модуль, отличный от стандартного sendmail, необходим другой способ чтения сообщений.mail -s "cron output" test@example.com
работает просто отлично: /less $MAIL
если вы хотите увидеть вывод cron для текущего пользователя илиless /var/spool/mail/root
если вы хотите увидеть вывод cron для команд, выполняющихся от имени пользователя root.Задачи, которые выполняет cron, отвечают за их собственную регистрацию.
источник
Самый простой способ - зафиксировать ошибки печати и сохранить их в файле. У меня есть 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.
источник
Я думаю, что перенаправление внутри cron-файла может быть не лучшим вариантом в этом случае.
Часто требуется, чтобы спецификация ведения журнала совмещалась со сценарием задания cron. В этом случае я предлагаю следующее:
Это добавляет вывод из задания cron в файл capture-log.txt.
источник
Я предпочитаю получать отчеты по электронной почте о работе cron. Просто положи
MAILTO=yourmail@domain.com
в crontab, и вы получите письмо. Конечно, вы должны настроить электронную почту для своей учетной записи.
источник