cronjob运行的.sh脚本不会发送电子邮件

时间:2016-04-06 12:25:02

标签: linux bash shell email

我有一个运行.sh脚本的cronjob,该脚本应生成.txt文件并将其作为电子邮件发送。

我使用sudo crontab -e

这是脚本:

send_update.sh,-rwxrwxrwx

#!/bin/sh
python /home/myusername/backend/mypy.py > update.txt
sed -i '1s/^/Subject: Daily Update /' update.txt
sendmail myemail@gmail.com < /home/myusername/backend/update.txt
echo "tester" >> tesert.txt

有趣的是,这个文件运行正常,因为echo确实打印到文件但我没有收到电子邮件。

如果我通过键入sudo ./send_update.sh从命令行运行该文件,它会发送电子邮件。

编辑1

cron文件行如下所示:

* * * * * cd /home/myusername/backend && ./send_update.sh

编辑2

tesert.txt与send_update.sh在同一个文件夹中,并且它会被cron作业打印出来

编辑3

所涉及的所有文件都具有权限:-rwxrwxrwx

编辑4

#!/bin/sh
python py2db.py > update.txt
sed -i '1s/^/Subject: Daily Update /' update.txt
sed -i '$ d' update.txt
date >> update.txt
sendmail myemail@gmail.com < update.txt

这是新的send_update.sh文件。它每分钟都会成功打印最近一分钟的update.txt,但它从不发送电子邮件。

编辑5

根据建议,我将文件更改为

#!/bin/sh
python py2db.py > update.txt || echo "error python" >>/tmp/error.log
sed -i '1s/^/Subject: Daily Update /' update.txt || echo "error sed1" >>/tmp/error.log
sed -i '$ d' update.txt || echo "error sed2" >>/tmp/error.log
date >> update.txt || echo "error date" >>/tmp/error.log
sendmail myemail@gmail.com < update.txt || echo "error sendmail" >>/tmp/error.log

并在其运行后cat /tmp/error.log读取error sendmail

编辑6

查看日志后我发现:

sendmail:找不到

我现在正在尝试更新包含sendmail的路径。如果有人能指导我如何做到这一点,我将不胜感激。

编辑7

sendmail更改为/usr/sbin/sendmail修复了问题,建议的错误检查将我带到那里。

1 个答案:

答案 0 :(得分:2)

向脚本添加调试并在文件中记录错误,例如:

#!/bin/sh
python py2db.py > update.txt || echo "error python" >>/tmp/error.log
sed -i '1s/^/Subject: Daily Update /' update.txt || echo "error sed1" >>/tmp/error.log
sed -i '$ d' update.txt || echo "error sed2" >>/tmp/error.log
date >> update.txt || echo "error date" >>/tmp/error.log
sendmail myemail@gmail.com < update.txt || echo "error sendmail" >>/tmp/error.log

也许你没有为你的一个命令设置路径,尝试导出PATH =。