我有以下 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)就可以了。