crontab使用入門


本文目的

最近的工作中,經常需要執行定時任務,使用crontab編寫一些定時腳本。在這里記錄下來,方便以后回憶。

 

crond和crontab

cron是linux提供的一種服務器,用於定期執行shell命令。主要由兩部分組成

  • crond:cron服務的守護進程,用於定期調度
  • crontab:cron提供的UI,用於編輯調度計划

crontab的使用方法,大家可以man一下,如下圖:

clip_image002

主要有三個選項:

  • “-e”編輯:與vim類是,但是在保存退出時,他會幫你檢查任務語法
  • “-l”列舉所有任務;
  • “-r”刪除所有任務;

P.S.: 目前介紹的是基於當前用戶的crontab,系統級別的crontab見后面介紹。

 

基本語法

cron的語法很簡單,如下:

【調度頻率】 shell命令

看個例子:

clip_image004

可以看出,前面分別是分鍾,小時,天,月和周,最后是shell命令。cron調度的最小頻率為1分鍾。上面這段調度的意思是:“每天10點30分,執行/some/path/do_something.sh”。

以上命令中每一塊的具體意義如下:

意義

分鍾

小時

月份

命令

范圍

0-59

0-23

1-31

1-12

0-7

shell命令

P.S.: “周”這一欄中0和7都代表周日

P.S.: 每個月的最后一日無法由crontab直接支持,需要通過腳本判斷,參見這里

P.S.: 命令最好是絕對路徑

還有一些輔助的符號,可以借助他們寫出更靈活的調度

特殊字符

代表意義

*(星號)

代表任何時候都接受,比如上面的例子,day,month和week為“*”,表示無論那個月,那一天,周幾,都在10點30分執行命令。

,(逗號)

並列時間。舉個例子:

* 3,6,9,12 * * * command

上面的意思是在3點,6點,9點或12點,執行命令。

-(減號)

連續區間。舉個例子:

* 9-17 * * * command

上面的意思是從9點到17點,每一分鍾都要執行這個任務

/n(斜線)

n代表數組,表示每隔n個單位之間,比如每隔5分鍾,可以寫成下面

*/5 * * * * command

 

一些例子

  • 59 23 11 27 * mail benben < /home/dmtsai/lover.txt // 每一年11月27日23分59 秒發一封情書給benben
  • 0 17 * * 5 mail all_members < weekily_report_notify // 每周五5點整,提醒所有組員發周報

系統級的crontab

系統級的crontab只有root權限有權編輯,該crontab是一個文件,位置為/etc/crontab,

系統級別的crontab的語法與上面稍微不一樣,需要在頻率和命令之間添加命令執行者,如下所示,並且可以添加一些全局變量,在調度中使用:

clip_image006

詳細的系統級調度可以參見這里

這里需要強調/etx目錄下幾個與cron有關的目錄和文件,如下所示

clip_image008

  • cron.d:目錄,此目錄下以及子目錄中所有符合調度語法的文件都會被執行
  • cron.deny與cron.allow:此文件記錄拒絕和允許執行的帳號,cron.allow的優先級大於cron.deny,建議一般只留一個就可以
  • cron.daily/hourly/monthly/weekly:這些目錄里面全部都是腳本,分別在指定的時間里面執行。

 

絕對路徑

雖然crontab執行,可以理解為手動執行的定時觸發。但是,執行過程中的路徑仍然有所區別,很多情況下手動執行成功,但是crontab不成功,多半是由於采用了相對路徑。所以,使用crontab時,盡量采用絕對路徑。結果一些實踐,總結了一條經驗:如果命令手動可以執行成功,但是crontab失敗,那么就需要重點關注相關路徑問題。

 

參考資料


免責聲明!

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



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