Sendmail 不适用于 crontab (bash)
Posted
技术标签:
【中文标题】Sendmail 不适用于 crontab (bash)【英文标题】:Sendmail is not working with crontab (bash) 【发布时间】:2014-07-07 08:46:57 【问题描述】:我创建了一个磁盘清理脚本,清理后会发送一封状态电子邮件。现在,当我通过命令行运行它时,它可以完美执行,但是通过 cronjob 它无法发送状态邮件,尽管脚本运行正常。我在谷歌阅读了很多解决方案,但没有什么对我有用。我在我的 Ubuntu 机器上使用 Bash。这是我脚本的 sendmail 部分。
export CONTENT="/root/cleanup/cleanup.htm"
export SUBJECT="Disk Space Clean Up Process : Completed @ $date_time"
(echo "Subject: $SUBJECT"
echo "`cat sendmail_list.txt`"
echo "MIME-Version: 1.0"
echo "Content-Type: text/html"
echo "Content-Disposition: inline"
cat $CONTENT
)|/usr/sbin/sendmail -t
请帮助我知道解决方案...谢谢
【问题讨论】:
cat sendmail_list.txt
时使用完整路径。
可能值得检查 /var/log/syslog
是否有任何不妥之处。您可以通过运行 less /var/log/syslog | grep CRON
过滤掉 cron 消息
你的步骤已经奏效了 Fedorqui....非常感谢...
【参考方案1】:
请在 sh 文件中 sendmail 前添加/usr/sbin
:
/usr/sbin/sendmail "user@domain.com" < file.txt
希望对https://***.com/editing-help有帮助
【讨论】:
【参考方案2】:邮件标题和正文之间需要一个空行。
echo "Subject: $SUBJECT"
echo "$(< sendmail_list.txt)"
echo "MIME-Version: 1.0"
echo "Content-Type: text/html"
echo "Content-Disposition: inline"
echo ""
cat $CONTENT
| /usr/sbin/sendmail -t
其他几件事:
这里不需要子shell,所以我把周围的括号改成了大括号 因为这是 bash,所以有$(cat file)
的简写——$(< file)
【讨论】:
感谢您的回复。我使用了您所说的空白行。但它仍然无法发送邮件。通过 cronjob 运行作业时似乎存在一些环境设置问题......但无法识别解决方案。 你对 fedorqui 的评论做了什么吗? 哦..我刚刚注意到Farmer的评论,不知道我是多么想念fedoqui的......我真是个傻瓜......它现在正在工作......谢谢大家......真的很感激...... .【参考方案3】:cron 作业和 CLI 执行之间的环境变量可能不同。
您可以检查 cron 和命令行执行的“env”命令输出之间的差异。
【讨论】:
这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review 感谢@eadana 的贡献!围绕您的答案提供更多细节/清晰度可能会有所帮助。 env > /tmp/env.manual.output.txt(手动运行) env > /tmp/env.cron.output.txt(在 cron 的脚本中运行)然后检查两者之间的差异输出文件。以上是关于Sendmail 不适用于 crontab (bash)的主要内容,如果未能解决你的问题,请参考以下文章