crontab是linux運維必須掌握的技能,雖然crontab好學,但是在實際書寫過程中也會遇到各種坑:
第一坑:比如寫一個命令每天晚上12點執行,可能新手在書寫時會出現兩種錯誤情況:
1、* 00 * * * CMD
這個錯誤的原因是沒有指定分鐘位的具體時間,會導致每分鐘都執行。
2、00 12 * * * CMD
這個錯誤的原因是不瞭解定時任務在書寫小時是按照24小時制來寫的,晚上12點應爲00,如果寫12是中午12點的意思。
第二坑:比如在寫定時備份文件的任務時,爲了避免文件名重複,往往會用到date +%F,但是由於我們忽略了%在定時任務crontab的配置文件是有特殊用法的,表示換行,所以往往我們寫的定時任務並沒有被真正執行,解決這個問題的辦法是將%F前面的%百分號用\轉義符去掉在crontab配置文件中的特殊意義。
第三坑:在寫命令時,沒有用命令的絕對路徑,會導致定時任務找不到該命令,因爲crontab默認只能找到/usr/bin和/bin下的命令,其他路徑的命令不能直接找到,需要加絕對路徑才能真正被使用。
第四坑:在定時任務書寫時,沒有將定時任務的輸出結果定向到一個文件或空/dev/null會導致兩種情況的發生:1、系統郵件服務開啓了,會導致postfix(C6)不斷給root發送郵件,給管理員造成困擾;2、如果郵件服務沒有開啓,會不斷增加郵件隊列在/var/spool/postfix/maildrop/目錄下創建小於4k的小文件,大量佔用inode,最終將磁盤的inode用光導致雖然block沒滿,但是inode滿了而存儲不了真正需要的數據。