開發者學堂課程【Linux 系統管理進階第三課時:crontab】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/789/detail/13755crontab
内容簡介
一、crontab的基本介紹
二、crontab文法
三、crontab常用工具
四、crontab的坑
一、crontab 的基本介紹
crontab 是用來定期執行程式的指令,當安裝完成作業系統之後,預設便會啟動此任務排程指令。
Crond 指令會在背景每分鐘定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
在實際使用過程中,我們有四個常用的指令介紹:
① crontab-I 列出目前的日程表
② Crontab-e 編輯目前日程表
③ Crontab-r 删除目前日程表
④ Crontab-u xx -I 列出xx使用者的日程表
大家就可以根據自己的使用需要去編輯自己的指令。
二、crontab 文法
crontab 作為一個定時任務排程的程式,就存在着定時任務排程的文法。在實際使用過程中,它的文法是以定義分鐘、小一個月中的第幾天、月份、星期,并附上對應的指令(program),來完成對應的定義。
如果說在分鐘定義的是0,在小時定義的是0,在一個月中的第幾天定義的是1,在月份中也定義1,在星期中定義*(代表所有可能的值),最後輸入一個echo hello,這就代表着在1月的1時的0時0分去執行echo hello。
常用文法:
①星号(*):代表所有可能的值,例如month字段如果是星号,則表示在滿足其它字段的 執行該指令操作。
② 逗号(,):可以用逗号隔開的值指定一個清單範圍,例如,“1,2,5,7,8.9
③中杠(-):可以用整數之間的中杠表示一個整數範圍,例如“2-6”表示“2,3,4,5,6"
④正斜線(/):可以用正斜線指定時間的問隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。
在實際使用過程中我們如何編輯crontab:
首先,登陸伺服器以後,其實看不到crontab 清單,這時可以執行crontab-I 來檢視排程表,這裡顯示目前使用者是沒有crontab 任務的,接下來可以使用crontab-e 進入編輯模式,去定義定時任務,先用* * * * *表示任意分鐘任意小時任意天任意月份以及任意星期,用五個*号表示在任意時間都要執行。然後可以執行一個指令:echo“123/r/n” >> /tmp/crontabtest(輸出tmp目錄下的crontabtest檔案),然後儲存并退出,這樣就會在tmp目錄下出現一個對應的生成的檔案,這時就可以使用crontab-l來檢視我們的服務。這時再去看剛剛所介紹分鐘、小時、天、月份以及星期,就知道具體的它們其實都是哪些指令,代表着什麼樣的時長。
在實際使用過程中,我們就可以根據我們的需要去調整我們實際看到的效果。或者我們直接使用ls/tmp,目前我們還沒有啟用我們的定時任務,這時我們可以使用systemctl statsus crond.service, 就可以看到我們服務的運作狀況,當我們重新開機我們的服務之後,再看一下我們的tmp 目錄,就可以看到crontabtest檔案。
檢視crontabtest 檔案,就會顯示剛剛輸入的資訊,這時crontab 就已經執行成功了。再輸入crontab-l 顯示指令,用crontab-r 去清空。當重新輸入crontab-l,就會發現剛剛的任務沒有了。
三、crontab 的常用工具
當覺得很困惑時,可以使用crontab guru 這個工具快速的了解crontab 的文法,可以把看到的指令規則填寫在此工具的輸入框中,工具就會告訴我們這個指令會在什麼樣的情況下執行。
例如:當輸入 * * * * *,這個工具就會告訴我們,這個指令在每個分鐘都會執行。當輸入*/2 * * * *,這個工具就會告訴我們,這個指令會在每一個第二分鐘執行。當輸入0-30/2 * * * * ,工具會告訴我們,這個指令在0-30分鐘之間每隔一個執行一次。
有了這個工具,就可以很快速的了解指令在下一個什麼時間點執行。
四、crontab 的坑
①新建立的cron 任務,不會馬上執行,至少要過2分鐘後才可以,當然可以重新開機cron 來馬上執行
②crontab 中的指令需要寫成絕對路徑
注:
第①點是因為crontab 會有一個加載的機制,我們編寫的指令需要加載到crontab 的整個程序當中,需要等下一次執行的時候才能夠加載進去。
第②點的絕對路徑是因為crontab 有他自己的使用者資訊,與所配置的使用者資訊不符,就會沒有辦法執行,是以寫成絕對路徑,確定我們的指令可以被執行。