說說crontab那點事(一)-crontab重定向


    使用crontab定時執行腳本是常有的事,在初始使用改命令的時候,肯定也覺得沒有什么太多的講究,隨着深入的運用,也會慢慢踩各種坑,今天就說說crontab的那點事。主要從crontab的重定向和crontab的環境變量兩個方面進行展開。 

   首先說說crontab的重定向。

   我們知道,如果crontab命令有輸出內容的話,該輸出內容會以郵件的形式發送給用戶,內容存儲在郵件文件/var/spool/mail/$user中。另外,我們也知道crontab功能是在一定的時間間隔調度一些命令來執行,如果命令執行比較頻繁,如一分鍾執行一次,或者命令數據內容較多,會使這個郵件文件不斷追加內容,文件越來越大。而郵件文件一般存放在根分區,根分區一般相對較小,所以會造成根分區寫滿而無法登錄服務器。

    舉例說明,某項目的系統訪問不了,nginx的報錯提示沒有空間:

     但是使用df -h命令,根部空間只是用到50%,但是使用df -i命令,已使用100%。

     注:df -h 關注剩余空間  df -i 關注剩余inode

       通過for i in /*; do echo $i; find $i |wc -l|sort -nr; done命令追溯,最終發現是/var/spool/clientmqueue中有大量文件,產生大量文件的原因,就是因為cron執行時會將相關結果以mail方式發送至執行用戶的賬號,可是當sendmial沒有啟動,那么所有信件就會暫存在這個目錄中,此時就會出現這種情況。

     所以說crontab的重定向很重要。

    將產生的文件重定向到某個文件下或者/dev/null。例如:

 */5 * * * * /root/XXXX.sh &>/dev/null 2>&1

/dev/null 代表空設備文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout標准輸出,系統默認值是1,所以">/dev/null"等同於"1>/dev/null"
2 表示stderr標准錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1

那么>/dev/null 2>&1的意思就是:
標准輸出重定向到空設備文件,也就是不輸出任何信息到終端,標准錯誤輸出重定向等同於標准輸出,因為之前標准輸出已經重定向到了空設備文件,所以標准錯誤輸出也重定向到空設備文件。

 

另外,重定向還有另外一個作用,即能產生日志,在執行定時任務時,並沒有預期的輸出結果時,可以使用重定向,將報錯信息寫入到指定文件,進行查看。

 

附: 禁止crontab產生大量文件的方式還有一種,即禁止其產生郵件,編輯crontab文件,crontab -e  在第一行中加入mainto="" 。然后保存退出,重啟crond。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM