Ответы:
Проверьте, имеют ли программы, которые вы запускаете с помощью 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
?
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.
Самый простой способ - зафиксировать ошибки печати и сохранить их в файле. У меня есть 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. В этом случае я предлагаю следующее:
#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>
Это добавляет вывод из задания cron в файл capture-log.txt.
Я предпочитаю получать отчеты по электронной почте о работе cron. Просто положи
MAILTO=yourmail@domain.com
в crontab, и вы получите письмо. Конечно, вы должны настроить электронную почту для своей учетной записи.