0

先说说我做了什么

#update.sh
#!/bin/bash
/usr/bin/freshclam
maldet -b -a /home

另一个脚本

#doandmail.sh
./update.sh > mail.txt

SUBJECT="Shell Script"
EMAIL="myemail@gmail.com"
EMAILMESSAGE="mail.txt"

/bin/mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE

./doandmail.sh当我使用带有结果的电子邮件运行 doandmail.sh时。我已经在 cron 中添加了这一行,@hourly /custom/doandmail.sh并且每小时都会收到空白电子邮件。

我完全是新手,需要你的建议来解决。

4

2 回答 2

2

我要说问题出在 ./update.sh > mail.txt

Cron 的路径可能很有趣 - 将这些路径设为绝对路径,然后再试一次。

于 2013-07-25T04:33:23.327 回答
1

解释器指令之前的#!行 - 行之前 - 是错误的,但可能不是您的问题。仅作为可执行文件的前两个字符是特殊的#!,并标识应该打开它的程序(/bin/bash在这种情况下)。shell 会倾向于通过默认自己来解释脚本,但这并不可靠——尤其是对于非 sh 脚本。

其次,http://www.talisman.org/~erlkonig/documents/commandname-extensions-considered-harmful

所以在/custom/update

#!/bin/bash
#  update

/usr/bin/freshclam
maldet -b -a /home

然后运行:chmod +x /custom/update

./doandmail

#!/bin/bash
#  doandmail

SUBJECT="Shell Script"      # these don't need to be uppercase
EMAIL="myemail@gmail.com"   # ...though it doesn't hurt anything
EMAILMESSAGE="mail.txt"     # usually only exported variable are upper.

/custom/update | /bin/mail -s "$SUBJECT" "$EMAIL"   # no need for a tmp file.

然后:chmod +x doandmail

当你crontab运行时,它不会有你正在考虑的相同目录,甚至你可能期望的相同环境,除非你明确地设置它们。它最有可能在./update... 中的行上中断doandmail。因此/custom/update以上。

在您的 crontab 中:

@hourly /custom/doandmail
于 2013-07-25T07:51:46.227 回答