脚本未运行!另外如何在邮件中附加时间戳?

脚本未运行!另外如何在邮件中附加时间戳?

我有以下 bash 脚本...

#!/bin/bash 
# Delete JUNK temp folder 

if [ -d JUNK/FOLDER/PATH ] 
then 
rm -rf JUNK/FOLDER/PATH 
echo "Cleansed JUNK directory successfully!" 
/usr/bin/mail -s "JUNK folder deleted successfully" [email protected] <<< "Success!" 
else 
/usr/bin/mail -s "JUNK folder not found" [email protected] <<< "Success!" 
fi

我的 crontab 中有它,如下所示

* * * * * /bin/sh /home1/ramnath/public_html/myscripts/deltemp.sh

Q1:为什么脚本没有运行?有错误吗?当我在终端中手动运行脚本时,出现错误:

bash myscripts/deltemp.sh Cleansed JUNK directory successfully! myscripts/deltemp.sh: line 8: mail: command not found

=====================

注意:问题已修复。我刚用过 mailx -s "JUNK directory deleted" "[email protected]"

答案1

您必须在脚本中给出绝对路径,cron可能会在其他地方运行脚本,而不是在$HOME.

您可能还没有mail(1)安装这个古老的程序。如果您有的话,为了理智起见,也请提供脚本运行的任何可执行文件的完整路径。

一般来说,对于任何PATH以额外权限运行的脚本(作为另一个用户,自动启动)使用绝对路径、显式设置或通过完整路径运行可执行文件需要一些额外的工作。这样你就可以防止在一些奇怪的目录中运行,或者选择错误的(甚至是恶意的)可执行文件,并避免很多麻烦。

答案2

1)该错误几乎是不言而喻的:您的脚本找不到mail二进制文件。要么它没有安装,要么它已经安装但不在你的 $PATH 中,因此你必须调用它并指定完整路径(例如/usr/bin/mail)。

2) 您不需要手动将时间戳附加到传递给 的有效负载中mail,因为电子邮件消息的Date:标头中已经带有时间戳:

Date: Fri, 22 Jan 2016 06:30:10 -0800

只要确保发送服务器是时间同步的(例如通过 NTP)就可以了。

相关内容