我有一个运行.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
修复了问题,建议的错误检查将我带到那里。
答案 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 =。