首頁 > 軟體

Linux Crontab 定時任務圖文詳述

2020-06-16 16:31:40

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命令檢視一下發現剛才建立的任務已經不見了


IT145.com E-mail:sddin#qq.com