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