LINUX.ORG.RU

рассылка писем через cron


0

1

Есть скрипт написанный на bash результаты выполнения которого отсылаются по почте. Скрипт запускается cron-ном. Если запустить скрипт из командной строки то всё работает нормально, если его запускает по расписанию cron то результаты не отсылаются по почте, причём раньше всё работало.

Вот команда в скрипте для отправки письма:
echo «сообщение» | mutt -s «тема письма» «адресс куда слать»

Mutt работает вместе с МТА ssmtp

Вот строки из конфига mutt относящегося к ssmtp:
set sendmail=«/usr/local/sbin/ssmtp» # путь к ssmtp
set realname=«WWWWWWW» # имя отправителя
set from=«почтовый адресс куда слать письмо» # e-mail отправителя


Вот конфиг ssmtp:
WWWWWWW=почтовый адресс куда слать письмо # от чьего имени шлем письма
mailhub=ip почтового сервера:25 # smtp-сервер и порт
hostname=имя этого хоста на котором всё это работает # имя нашего хоста, желательно вписать верное
UseTLS=Yes # используем зашифрованное соединение
AuthUser=почтовый адресс куда слать письмо # логин
AuthPass=XXXXXXXXXX # пароль
FromLineOverride=Yes # Поле From: может задавать mutt

где WWWWWWWWW имя пользователя заведённого в системе и от которого шлём письма, его id 0 тоесть он является root, но имя имеет не root а другое.

cron запускается от root

Вот файл пользователя crontab /usr/local/var/spool/cron/WWWWWWW:
00 20 * * * /home/WWWWWWWW/scripts/backup.sh

Вот файл /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
MAILTO=«»
HOME=/home/WWWWWWW
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR
#sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed


В логах cron вот что:

Nov 29 16:39:13 xxxxxx crontab[5824]: (root) BEGIN EDIT (WWWWWWW)
Nov 29 16:39:19 xxxxxx crontab[5824]: (root) REPLACE (WWWWWW)
Nov 29 16:39:19 xxxxxx crontab[5824]: (root) END EDIT (WWWWWWW)
Nov 29 16:39:41 xxxxxx crontab[5827]: (root) LIST (WWWWWWWW)
Nov 29 16:40:01 xxxxxx /usr/local/sbin/crond[5464]: (WWWWWWW) RELOAD (/usr/local/var/spool/cron/WWWWWWWW)
Nov 29 16:40:01 xxxxxx /USR/LOCAL/SBIN/CROND[5830]: (WWWWWWW) CMD (/home/WWWWWWWW/scripts/backup.sh)
Nov 29 16:40:41 xxxxxx /USR/LOCAL/SBIN/CROND[5839]: (CRON) EXEC FAILED (/usr/sbin/sendmail): No such file or directory
Nov 29 16:40:41 xxxxxx CROND[5830]: /.
Nov 29 16:40:41 xxxxxx /USR/LOCAL/SBIN/CROND[5829]: (WWWWWWWW) MAIL (mailed 96 bytes of output but got status 0x0001 )

где xxxxxx имя этого хоста
WWWWWWWW имя пользователя заведённого в системе и от которого шлём письма, его id 0 тоесть он является root, но имя имеет не root а другое.

настораживает строка: mailed 96 bytes of output but got status 0x0001

в общем проблему так и не решил, причём ничего не менялось и раньше всё работало и главное что из командной строки всё работает.

Если кто знает в чём причина помогите пожалуйста, или хотя бы подскажите где искать причину.
За помощь заранее благодарен.



★★

but got status 0x0001

MAILTO=«»

???

Ещё один момент, ssmtp, ЕМНИП, не умеет локальную доставку.

GotF ★★★★★ ()
Ответ на: комментарий от GotF

Ещё один момент, ssmtp, ЕМНИП, не умеет локальную доставку.


почтовый сервер на который отправляются письма находится не на этом компьютере

MAILTO это ведь адрес почты на этом компьютере на который cron шлёт свои сообщения используя sendmail, я его не писал потому как у меня и sendmail не стоит

Ещё хочу добавить следующее, когда запускаю скрипт из командной строки
то по iptraf-у видно как идёт соединение с почтовым сервером на 25 порт и почта отправляется.
а когда по cron то такого соединения не происходит.
Мне кажется что mutt вообще не запускается.

v4567 ★★ ()
Ответ на: комментарий от v4567

>> MAILTO это ведь адрес почты на этом компьютере на который cron шлёт свои сообщения

Не обязательно на этом.

Ещё хочу добавить следующее, когда запускаю скрипт из командной строки

то по iptraf-у видно как идёт соединение с почтовым сервером на 25 порт и почта отправляется. а когда по cron то такого соединения не происходит. Мне кажется что mutt вообще не запускается.

А если его прописать как «/usr/bin/mutt»?

GotF ★★★★★ ()
Ответ на: комментарий от GotF

А если его прописать как «/usr/bin/mutt»?


нет всё равно не работает

когда я запускаю скрипт из командной строки, то по команде ps aux видно в каком он терминале выполняется pts/1, а вот запущенный cron на этом месте вместо терминала пишет вопросительный знак, может причина в этом???????

v4567 ★★ ()

У вас в пользовательском crontab не определён адрес почты (MAILTO=""), поэтому когда скрипт что-то выводит, то crond пытается отправить это на почту. Либо определите MAILTO, либо почините скрипт, чтобы он ничего не выводил на stdout и stderr.

mky ★★★★★ ()
Ответ на: комментарий от mky

У вас в пользовательском crontab не определён адрес почты (MAILTO=""), поэтому когда скрипт что-то выводит, то crond пытается отправить это на почту. Либо определите MAILTO, либо почините скрипт, чтобы он ничего не выводил на stdout и stderr.


На другом сервере точно такие настройки и всё работает, причём на этом где не работает, другие команды выполняются только проблемы с почтовиком mutt, вернее cron почему то его запускает а mutt запустившись не работает а выдаёт:
mailed 96 bytes of output but got status 0x0001
и всё письмо не отправленно

v4567 ★★ ()
Ответ на: комментарий от v4567

Видимо, настройки всё таки где-то отличаются. Правильный скрипт для cron'а не должен никогда ничего выводить. Но если не получается поправить, просто добавьте перенаправление вывода в файл:

00 20 * * * /home/WWWWWWWW/scripts/backup.sh >> /tmp/backup.log 2>&1

И посмотрите, что пишется в файл.

P.S. Отвечая на ваш вопрос по поводу терминала. Да, crond не создаёт терминал и запускает процессы, в том числе и скрипты без управляющего терминала. Но большинству задач не нужен терминал и они нормально работают.

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.