Добрый день!
Столкнулся с необычной для меня проблемой - не могу отправить письмо из cron через sendmail.
Письмо отправляется, но приходит с пустым телом/сабжем.Если запускаю скрипт руками - всё работает, но при запуске через крон... Та же история.
Кусок кода с отправкой:
#!/bin/bash
#DATE=$(date +%d_%m_%Y)
MAIL_SUBJECT=""
MAIL_TO="recipient@domain.com"
echo $MAIL_SUBJECT > /mailtext.txt
echo Replication started! >> /mailtext.txt
sendmail $MAIL_TO < /mailtext.txtПробовал с разным указанием путей к файлу.
Пробовал и просто mailtext.txt (без указания пути) и /home/user/mailtext.txtСкрипт в кроне запускается от рута. Куда копать?
>[оверквотинг удален]
> #!/bin/bash
> #DATE=$(date +%d_%m_%Y)
> MAIL_SUBJECT=""
> MAIL_TO="recipient@domain.com"
> echo $MAIL_SUBJECT > /mailtext.txt
> echo Replication started! >> /mailtext.txt
> sendmail $MAIL_TO < /mailtext.txt
> Пробовал с разным указанием путей к файлу.
> Пробовал и просто mailtext.txt (без указания пути) и /home/user/mailtext.txt
> Скрипт в кроне запускается от рута. Куда копать?$ which sendmail
/usr/sbin/sendmailукажите полный путь к sendmail в скрипте.
> $ which sendmail
> /usr/sbin/sendmail
> укажите полный путь к sendmail в скрипте.Указал (/usr/sbin/sendmail)
Не помогло. Также пустые письма.
>> $ which sendmail
>> /usr/sbin/sendmail
>> укажите полный путь к sendmail в скрипте.
> Указал (/usr/sbin/sendmail)
> Не помогло. Также пустые письма.Команда из крона (одна из):
# * * * * * user-name command to be executed
0 4 * * * root /root/movetomove.sh
>> $ which sendmail
>> /usr/sbin/sendmail
>> укажите полный путь к sendmail в скрипте.
> Указал (/usr/sbin/sendmail)
> Не помогло. Также пустые письма.echo "Subject: test" | /usr/sbin/sendmail user@domain.com
пиши прям так... )
>>> $ which sendmail
>>> /usr/sbin/sendmail
>>> укажите полный путь к sendmail в скрипте.
>> Указал (/usr/sbin/sendmail)
>> Не помогло. Также пустые письма.
> echo "Subject: test" | /usr/sbin/sendmail user@domain.com
> пиши прям так... )Прям так заработало! Уже круто.
Хорошо, а как тогда на вход сэндмэйлу ещё и тело письма вкорячить? Если я правильно понял его ман, то тело для него начинается с новой строки, после сабжа. Перевод каретки внутри echo сделать?
>[оверквотинг удален]
>>>> /usr/sbin/sendmail
>>>> укажите полный путь к sendmail в скрипте.
>>> Указал (/usr/sbin/sendmail)
>>> Не помогло. Также пустые письма.
>> echo "Subject: test" | /usr/sbin/sendmail user@domain.com
>> пиши прям так... )
> Прям так заработало! Уже круто.
> Хорошо, а как тогда на вход сэндмэйлу ещё и тело письма вкорячить?
> Если я правильно понял его ман, то тело для него начинается
> с новой строки, после сабжа. Перевод каретки внутри echo сделать?воспользуйтесь утилитой mail, если не знаете как работает sendmail
>[оверквотинг удален]
>>>>> укажите полный путь к sendmail в скрипте.
>>>> Указал (/usr/sbin/sendmail)
>>>> Не помогло. Также пустые письма.
>>> echo "Subject: test" | /usr/sbin/sendmail user@domain.com
>>> пиши прям так... )
>> Прям так заработало! Уже круто.
>> Хорошо, а как тогда на вход сэндмэйлу ещё и тело письма вкорячить?
>> Если я правильно понял его ман, то тело для него начинается
>> с новой строки, после сабжа. Перевод каретки внутри echo сделать?
> воспользуйтесь утилитой mail, если не знаете как работает sendmailЧерез sendmail я регулярно отправляю уведомления из скриптов, и всё работает.
Но из крона - впервые, вот и хочу разобраться.
>[оверквотинг удален]
>>>>> Не помогло. Также пустые письма.
>>>> echo "Subject: test" | /usr/sbin/sendmail user@domain.com
>>>> пиши прям так... )
>>> Прям так заработало! Уже круто.
>>> Хорошо, а как тогда на вход сэндмэйлу ещё и тело письма вкорячить?
>>> Если я правильно понял его ман, то тело для него начинается
>>> с новой строки, после сабжа. Перевод каретки внутри echo сделать?
>> воспользуйтесь утилитой mail, если не знаете как работает sendmail
> Через sendmail я регулярно отправляю уведомления из скриптов, и всё работает.
> Но из крона - впервые, вот и хочу разобраться.Еще как мне кажется проблема в строчке: echo Replication started! >> путькфайлу/mailtext.txt
Попробуйте её сделать в кавычках: echo "Replication started!"" >> путькфайлу/mailtext.txt
> Еще как мне кажется проблема в строчке: echo Replication started! >> путькфайлу/mailtext.txt
> Попробуйте её сделать в кавычках: echo "Replication started!"" >> путькфайлу/mailtext.txtЭффекта, к сожалению, не возымело.
В принципе, я и без проверки думал что не заработает, т.к. изначально строка выглядела примерно так:
sendmail recipient@domain.com < /path/to/file.А, вот, за подсказку с cat-ом спасибо - помогло.
Сейчас часть кода с отправкой выглядит так:
MAIL_SUBJECT="Subject: It a subject of the mail"
MAIL_TO="recipient@domain.com"cat - /dir/MessageName.txt | sendmail -t $MAIL_TO
В начало файла загнал Subject: по умолчанию.А если отправить нужно с другим сабжем (Тем, который в скрипте) - то уже вызов выглядит так:
echo $MAIL_SUBJECT | cat - /dir/MessageName.txt | sendmail -t $MAIL_TO
В этом случае письмо уходит с сабжем из переменной, а сабж из файла игнорируется.
Думаю, вся проблема заключается в том, что cron запускает sendmail в минимальном окружении и есть какие-то отличия в PATH, в таком случае.Спасибо, [SOLVED] !
> Через sendmail я регулярно отправляю уведомления из скриптов, и всё работает.
> Но из крона - впервые, вот и хочу разобраться.рукалицо ....
>[оверквотинг удален]
>>>> /usr/sbin/sendmail
>>>> укажите полный путь к sendmail в скрипте.
>>> Указал (/usr/sbin/sendmail)
>>> Не помогло. Также пустые письма.
>> echo "Subject: test" | /usr/sbin/sendmail user@domain.com
>> пиши прям так... )
> Прям так заработало! Уже круто.
> Хорошо, а как тогда на вход сэндмэйлу ещё и тело письма вкорячить?
> Если я правильно понял его ман, то тело для него начинается
> с новой строки, после сабжа. Перевод каретки внутри echo сделать?echo "Subject: Testing" | cat - /home/file1.out | /usr/sbin/sendmail -t user@domain.com
>[оверквотинг удален]
>>>> /usr/sbin/sendmail
>>>> укажите полный путь к sendmail в скрипте.
>>> Указал (/usr/sbin/sendmail)
>>> Не помогло. Также пустые письма.
>> echo "Subject: test" | /usr/sbin/sendmail user@domain.com
>> пиши прям так... )
> Прям так заработало! Уже круто.
> Хорошо, а как тогда на вход сэндмэйлу ещё и тело письма вкорячить?
> Если я правильно понял его ман, то тело для него начинается
> с новой строки, после сабжа. Перевод каретки внутри echo сделать?http://unix.stackexchange.com/questions/168232/what-is-the-f...
тоже полезно может быть.
> http://unix.stackexchange.com/questions/168232/what-is-the-f...
> тоже полезно может быть.Действительно полезно, спасибо!