2021-05-12 14:32:11
Linux Crontab 定時任務圖文詳述
Linux內建的cron進程能幫我們實現這些需求,cron搭配shell指令碼,非常複雜的指令也沒有問題。
cron介紹
我們經常使用的是crontab命令是cron table的簡寫,它是cron的組態檔,也可以叫它作業列表,我們可以在以下資料夾內找到相關組態檔。
- /var/spool/cron/ 目錄下存放的是每個使用者包括root的crontab任務,每個任務以建立者的名字命名
- /etc/crontab 這個檔案負責排程各種管理和維護任務。
- /etc/cron.d/ 這個目錄用來存放任何要執行的crontab檔案或指令碼。
我們還可以把指令碼放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目錄中,讓它每小時/天/星期、月執行一次。
crontab的使用
我們常用的命令如下:
crontab [-u username] //省略使用者表表示操作當前使用者的crontab
-e (編輯工作表)
-l (列出工作表裡的命令)
-r (刪除工作作)
我們用crontab -e進入當前使用者的工作表編輯,是常見的vim介面。每行是一條命令。
crontab的命令構成為 時間+動作,其時間有分、時、日、月、周五種,操作符有
* 取值範圍內的所有數位
/ 每過多少個數位
- 從X到Z
,雜湊數位
具體的用cat /etc/crontab可以看一下它的組態檔,可以看到程式碼的具體格式跟要求就跟下面一樣
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
範例
範例1:每1分鐘執行一次myCommand
* * * * * myCommand
範例2:每小時的第3和第15分鐘執行
3,15 * * * * myCommand
範例3:在上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * * myCommand
範例4:每隔兩天的上午8點到11點的第3和第15分鐘執行
3,15 8-11 */2 * * myCommand
範例5:每週一上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * 1 myCommand
範例6:每晚的21:30重新啟動smb
30 21 * * * /etc/init.d/smb restart
範例7:每月1、10、22日的4 : 45重新啟動smb
45 4 1,10,22 * * /etc/init.d/smb restart
範例8:每週六、週日的1 : 10重新啟動smb
10 1 * * 6,0 /etc/init.d/smb restart
範例9:每天18 : 00至23 : 00之間每隔30分鐘重新啟動smb
0,30 18-23 * * * /etc/init.d/smb restart
範例10:每星期六的晚上11 : 00 pm重新啟動smb
0 23 * * 6 /etc/init.d/smb restart
範例11:每一小時重新啟動smb
* */1 * * * /etc/init.d/smb restart
範例12:晚上11點到早上7點之間,每隔一小時重新啟動smb
* 23-7/1 * * * /etc/init.d/smb restart
下面就具體實驗一下這個命令把!
首先使用date命令獲取一下當前的系統時間,已經獲取到了系統的時間19時5分
接下來使用crontab -e命令進入對定時工作列表的檔案當中,是一個類似於vim編輯器的一個介面,這邊沒有加上u選項,如果想指定使用者的話加上-u然後指定使用者名稱.但前提是執行的命令不是以互動形式來執行命令,而且指定使用者必須對執行的程式碼擁有執行許可權,否則設定了等於沒有設定.如果不指定使用者名稱的話,系統預設實行使用者為當前使用者
進入任務編輯選單,我這邊輸入了一條任務.在每年每月每天的19:08分會在/tmp目錄下面建立一個"123.txt"的檔案,並且在當中輸入一段話" i love you !"
接下來使用crontab -l命令來檢查一下剛才輸入的任務,發現已經存在,接下來要做的就是等待時間的到來
再次使用date命令檢視了一下系統當前的時間,發現已經過去了好幾分鐘,使用vim /tmp/123.txt命令檢視了已經剛才設定建立的檔案.確實發現了這個檔案並看見了當中輸入的一段話"i love you!",
如果說要刪除周期性任務的操作就是crontab -r注意是刪除全部任務,如下圖這邊我隨便建立了三個週期性的任務儲存並退出.後使用crontab -r命令以後檢視一下發現剛才建立的三個任務都已經被刪除了.這邊講的是如果想刪除所有任務的話請用這一條命令. 如果想刪除一條任務的請使用crontab -e進入任務編輯模式,用vim的dd(刪除行命令)把那一條不需要執行定時任務的程式碼刪除即可
上面一種週期性的定時任務設定,每當到這個時間節點的時候都會去執行這個任務,還有一種方法也是設定一個定時任務只能執行一次命令就是at,接下來繼續做一個小實驗. 利用at定時任務命令把剛才建立的123.txt檔案刪除 使用date命令獲取了一下當前系統的時間19時31分,和確認了一下/tmp目錄下的檔案存在
接下來使用at命令建立一個定時任務,任務格式是 時:分 年:月:日,我這邊輸入的是在2019年的8月24日19點35分刪除/tmp目錄下的123.txt文,件並在mnt目錄下建立一個abc.txt檔案,所有的命令輸入完成後按"ctrl + d鍵"儲存任務. 建立儲存完成之後再使用atq命令檢查了一下任務已經生成
使用date命令獲取到了系統時間已經過了35分,在使用ls /tmp命令檢視了一下tmp目錄發現原來的123.txt檔案已經被刪除,而abc.txt檔案被建立了,這就是我們的試驗結果
而刪除at建立的任務命令是atrm命令現在我們要建立一個任務然後去刪除它. 下面就新建了一個任務,用atq命令檢視了一下任務編號為4,接下來使用atrm 4把剛建立的4號任務刪除,最後再使用atq命令檢視一下發現剛才建立的任務已經不見了
相關文章