/etc/cron.daily/foo: Надіслати електронний лист певному користуваче замість root?


13

Я працюю CentOS 5.5.

У нас є кілька cronjobs, що зберігаються в /etc/cron.daily/. Ми хотіли б, щоб повідомлення електронної пошти перейшло на певну адресу електронної пошти, тоді як решта електронних листів у /etc/cron.daily/ повинні перейти на електронну адресу за замовчуванням (root @ localhost).

Cronjobs у /etc/cron.daily/ запускається з файлу / etc / crontab. / etc / crontab вказує поле "MAILTO". Чи можу я змінити це, встановивши MAILTO в моїй /etc/cron.daily/foo cronjob?

Який найкращий спосіб впоратися з цим?


Примітка для користувачів CentOS 6.5 (cronie): /etc/crontabне вказує значення за замовчуванням.
Адам Монсен

Відповіді:


13

Установка MAILTO=user@example.orgв /etc/cron.daily/fooне працює. Вихід сценарію не надсилається на адресу user@example.org.

Сторінка за адресою http://www.unixgeeks.org/security/newbie/unix/cron-1.html також пропонує просте рішення:

Зараз файл /etc/cron.daily/fooмістить таке:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" stefanl@example.org

Це надішле електронний лист на адресу "stefanl@example.org" з темою, яка дорівнює повному шляху сценарію (наприклад /etc/cron.daily/foo).

Ось що говорить Unixgeeks.org про це:

Вихід з крона

Як я вже говорив раніше, вихід з cron надсилається по електронній пошті власнику процесу або людині, вказаній у змінній MAILTO, але що робити, якщо ви цього не хочете? Якщо ви хочете відправити висновок комусь іншому, ви можете просто передати висновок командної пошти. напр

cmd | користувач пошти "Тема пошти" користувача

Іноді я хочу отримувати лише помилки від cronjob, а не stdout, тому я використовую цей трюк. Синтаксис може здатися неправильним на перший погляд, але будьте впевнені, він працює. Наступна cronjob відправить STDOUT в / dev / null, а потім обробляє STDERR по конвеєру.

doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org

Те саме, але надіслати в syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Також дивіться мою відповідь на сервер ServerFault до Cronjob stderr, щоб подати та надіслати електронною поштою


6

Більш елегантним рішенням буде використання /etc/cron.dбезпосередньо. Замість того, щоб мати свій скрипт /etc/cron.daily, поставте його десь як, /usr/local/sbin/myscript.shа потім створіть файл /etc/cron.d/myscriptяк:

MAILTO=root,whomever@example.org
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Це також дає вам набагато більше контролю над тим, коли робота відбувається; наприклад, лише в будні дні тощо. Додаткову інформацію див. у crontab(5)чоловіка.


0

Припускаючи, що у вас є доступ до SA на цій машині, ви можете створити новий обліковий запис користувача, додати завдання до цих облікових записів. Потім пошту для цього користувача можна переслати за допомогою .forward-файлу в домашній папці цього облікового запису. Можливо, вам доведеться налаштувати дозволи для цього користувача, якщо завданням cron потрібен приватний доступ.

Чи справді найкраще підходить ця відповідь чи відповідь Стефана, залежить від того, скільки клопотів ви хочете налаштувати, і чи хочете ви, щоб повідомлення про помилки переходили до кореневої пошти або до людей, які зазвичай відстежують щоденний показ.

Удачі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.