Назад | Перейти на главную страницу

Может ли cron записывать вывод задания в журнал * по умолчанию * (вместо почты)?

Все мы знаем, что правильный способ обработки вывода заданий 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 /