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

23

Мы все знаем, что правильный способ обработки вывода из заданий cron - это перенаправить его в файл:

0 * * * * /bin/date >> /var/log/date.log 2>&1

Тем не менее, иногда администраторы ленивы, забывчивы или невежественны и не помещают эти перенаправления; в этом случае выходные данные задания отправляются по почте в $ MAILTO или пользователю-владельцу или пользователю root. На некоторых из ящиков, которыми я управляю, почта отключена, поэтому этот вывод попадает в черную дыру. Что мне интересно, так это то, можно ли как-нибудь сказать, чтобы cron брал какой-либо вывод задания и вместо того, чтобы отправлять его по почте, выбрасывал его куда-нибудь в лог-файл? Я использую Ubuntu (8.04, но перехожу на 9.04). В этом случайном результате Google есть намек на такое решение , но я думаю, что OP, возможно, был озадачен выводом cron по сравнению с выходом заданий cron.

Я открыт для решений, которые включают немного сценариев или взлома, но в идеале это будет бит конфигурации, который я мог бы установить где-нибудь. Я не вижу никаких подсказок man cron. Благодарность!

штифтик
источник

Ответы:

1

Для croniecron (который рекомендуется, например, в Gentoo Handbook) есть аргумент «-s» для вызова cron, который отправляет выходные данные задания в системный журнал, используя syslog.

Томаш Дивиш
источник
3

Короткий ответ - нет, cron отправляет письма владельцу crontab по заданию. В стандартном cron нет способа это изменить.

Лучшее, что я могу придумать, - это настроить адаптеры MTA на машинах, на которых вы хотите, чтобы это поведение сбрасывало почту в файл журнала вместо почтового ящика пользователя.

Камил Кисиэль
источник
3

Я не уверен, что именно вы имеете в виду, когда говорите «почта отключена». Но, может быть, вы могли бы создать псевдоним, /etc/aliasesкоторый направлен на канал? Что-то типа

root: "|/bin/cat >> /var/log/cron.log"
InnaM
источник
root: /var/log/cron.logне работает? feep.net/sendmail/tutorial/intro/aliases.html
эндолиты
Ничего не делает для меня.
Эндолит
Они могут работать, только если вы используете sendmail в качестве MTA. Это становится все менее распространенным. (Да, я знаю, что отвечаю на 5-летний комментарий!)
Alex L
2

Я не думаю, что то, что вы просите, на самом деле возможно с помощью Ubuntu (или любого другого) cron.

Помимо идеи geekmonkeys, вы также можете установить $ MAILTO для локальной учетной записи и направить вывод через procmail.

Адам
источник
1

Никогда не слышал о такой настройке для cron, поэтому я выбрал бы сценарий.

Создайте задание cron для patrol / var / spool / cron / * и добавьте перенаправление к любому заданию, в котором его нет.

geekmonkey
источник
1

Другой вариант - создать сценарий оболочки с именем cron_wrapper или что-то в этом роде, и сделать так:

#! / Bin / ш

eval "$ * >> /var/log/cronlog.log"
выход $?

Тогда всем вашим crontabs нужно что-то вроде этого:

* * * * * / usr / local / bin / cron_wrapper echo hello

Обратите внимание, я не тестировал этот код, это всего лишь идея.

Джастин Эллисон
источник
1
Это не решает проблему. Если люди не могут забыть установить MAILTO или перенаправить стандартный вывод в файл, они не захотят запускать вещи через оболочку.
Камил Кисиэль
1

Я не знаю, что такое "стандартный cron". Существует много демонов cron, разные дистрибутивы используют разные. Vixie cron используется наиболее широко, так что, вероятно, вы это имели в виду. Но в некоторых дистрибутивах это не будет по умолчанию.

Я взял на себя разработку cron (dcron) Диллона, который используется по умолчанию в Arch Linux. Другие дистрибутивы тоже используют его, но я не знаю, является ли это по умолчанию где-либо еще. У dcron есть опция вызова, -Mчтобы указать, что вы хотите использовать собственный скрипт вместо sendmail. Сценарий &>вызывается без аргументов, с несколькими заголовками электронной почты и выводом любых cronjobs как stdin. (Если нет &>вывода, скрипт не вызывается.)

dubiousjim
источник
1

почему бы нам не установить MAILTO = "" в конкретном пользовательском crontab. Это отключит регистрацию почтовых сообщений в / var / spool / mail /

Лалита
источник