【发布时间】:2016-04-06 12:25:02
【问题描述】:
我有一个运行 .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
有趣的是,这个文件可以正常运行,因为回显确实会打印到文件中,但我没有收到电子邮件。
如果我从命令行输入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 文件。它每分钟成功打印最近一分钟以更新.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 的路径。如果有人能指导我如何做到这一点,将不胜感激。
编辑 7
将sendmail 更改为/usr/sbin/sendmail 解决了问题,建议的错误检查将我引导到那里。
【问题讨论】:
-
检查权限;修改脚本以使用 su - "user",其中 "user" 与您手动运行脚本时使用的相同
-
当您手动运行它时,您是否在
/home/myusername/backend目录中?因为你的 cron 工作不会。为什么你只在那一行使用绝对路径? -
@EtanReisner 查看我的更新
-
您希望该 cron 作业在哪个用户下运行?它实际上在哪个用户下运行?
sendmail是否向标准输出或标准错误输出任何内容?您的邮件日志中有任何内容吗?