2013-07-25 40 views
0

讓我告訴我做什麼第一的cronjob每小時運行和電子郵件結果

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

另一個腳本

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

SUBJECT="Shell Script" 
EMAIL="[email protected]" 
EMAILMESSAGE="mail.txt" 

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

當我運行doandmail.sh使用./doandmail.sh與結果的電子郵件被髮送。我在cron @hourly /custom/doandmail.sh中添加了這一行,並且每小時收到一封空白電子郵件。

我完全是新手,需要您的建議來解決。

+1

有嘗試完整路徑'update.sh'和'mail.txt'?也許cron用不同的文件夾運行腳本作爲「當前工作文件夾」。 – furas

+0

update.sh,mail.txt和doandmail.sh位於相同的目錄/ custom /中,並且在crontab中,我添加了@hourly /custom/doandmail.sh。 – IFightCode

回答

1

解釋器指令前面的行 - 在#!行之前 - 是錯誤的,但可能不是您的問題。 #!僅作爲可執行文件的前兩個字符的特殊字符,並確定程序應該打開它(本例中爲/bin/bash)。 shell會傾向於通過默認來解釋腳本,但這不可靠 - 特別是對於非sh腳本。

其次,在/custom/update

#!/bin/bash 
# update 

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

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

因此然後運行:chmod +x /custom/update

./doandmail

#!/bin/bash 
# doandmail 

SUBJECT="Shell Script"  # these don't need to be uppercase 
EMAIL="[email protected]" # ...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運行時,除非您明確設置它們,否則它將沒有相同的目錄,或者您可能期望的環境相同。這很可能會破壞doandmail中的./update ...行。因此,上面的/custom/update

在crontab:

@hourly /custom/doandmail 
+0

像魅力一樣工作,謝謝。 – IFightCode

2

我會說,問題是出在./update.sh> mail.txt

的Cron可以是有趣的與路徑 - 讓這些是絕對路徑,然後再試一次。

+0

+1,而且'doandmail.sh'也相當多餘,因爲Cron無論如何都會以電子郵件的方式向您發送輸出。 (當然,能夠設置一個有用的主題行會很有用,但在這裏幾乎不可能)。您可以通過在'crontab'中設置MAILTO來覆蓋收件人。 – tripleee

相關問題