Все мы знаем, что правильный способ обработки вывода заданий cron - это перенаправить его в файл:
0 * * * * /bin/date >> /var/log/date.log 2>&1
Однако иногда администраторы ленивы, забывчивы или невежественны и не вводят эти перенаправления; в этом случае результат задания отправляется по почте $ MAILTO, пользователю-владельцу или root. На некоторых ящиках, которыми я управляю, почта отключена, поэтому этот вывод попадает в черную дыру. Мне интересно, есть ли способ сказать cron, чтобы он принимал какие-либо выходные данные задания и вместо того, чтобы отправлять их по почте, помещал их в общий файл журнала где-нибудь? Я использую Ubuntu (8.04, но перехожу на 9.04). Намек на такое решение есть в этом случайный результат Google, но я думаю, что OP, возможно, был смущен выводом cron по сравнению с выводом заданий cron.
Я открыт для решений, требующих написания сценариев или взлома, но в идеале это был бы бит конфигурации, который я мог бы где-нибудь установить. Я не вижу намеков в man cron
. Спасибо!
Я не совсем понимаю, что именно вы имеете в виду, когда говорите «почта отключена». Но, возможно, вы могли бы создать псевдоним в /etc/aliases
что направлено в трубу? Что-то вроде
root: "|/bin/cat >> /var/log/cron.log"
Короткий ответ - нет, cron по умолчанию отправляет письмо владельцу crontab. В стандартном cron нет возможности это изменить.
Лучшее, что я могу придумать, - это настроить MTA на машинах, где вы хотите, чтобы это поведение сбрасывало почту в файл журнала, а не в почтовый ящик пользователя.
Я не думаю, что то, о чем вы просите, действительно возможно с Ubuntu (или любым другим) cron.
Помимо идеи geekmonkeys, вы также можете установить $ MAILTO в локальную учетную запись и направить вывод через procmail.
Для cronie
cron (что рекомендуется, например, Gentoo Handbook), для вызова cron есть аргумент «-s», который отправляет вывод задания в системный журнал с помощью syslog.
Никогда не слышал о такой настройке для cron, поэтому я бы выбрал сценарий сценария.
Создайте задание cron для патрулирования / var / spool / cron / * и добавьте перенаправление к любому заданию, у которого его нет.
Другой вариант - создать сценарий оболочки под названием cron_wrapper или что-то в этом роде, и он просто сделает что-то вроде этого:
#!/bin/sh eval "$* >> /var/log/cronlog.log" exit $?
Тогда всем вашим crontab просто нужно что-то вроде этого:
* * * * * /usr/local/bin/cron_wrapper echo hello
Обратите внимание: я не тестировал этот код, это просто идея.
Не знаю, что такое "стандартный cron". Демонов cron много, разные дистрибутивы используют разные. Vixie cron широко используется, так что, вероятно, вы имели в виду именно это. Но в некоторых дистрибутивах это не будет по умолчанию.
Я взял на себя разработку Крон Диллона (dcron), который используется по умолчанию в Arch Linux. Другие дистрибутивы тоже используют его, но я не знаю, используется ли он по умолчанию где-либо еще. dcron имеет возможность вызова -M
чтобы указать, что вы хотите использовать собственный сценарий вместо sendmail. Сценарий вызывается без аргументов, с несколькими заголовками электронной почты и &>
вывод любых cronjobs как stdin. (Если нет &>
вывод скрипт не вызывается.)
почему бы нам не установить MAILTO = "" в crontab конкретного пользователя. Это отключит регистрацию почтовых сообщений в / var / spool / mail /