定時任務Cron


  Linux系統中的定時任務cron,一個很實際很有效很簡單的一個工作,在日常的生產環境中,會被廣泛使用的一個組件。通過設置時間、執行的腳本等內容,能夠讓系統自動的執行相關任務,很是方便。

  cron定時任務,在系統中能夠執行,需要有一個依賴的服務,也就是crond定時任務服務,該服務默認情況下是開機自啟動的,通過命令chkconfig 可以查看,設置開機啟動的命令,chkconfig crond on。

  在為系統用戶創建定時任務時,默認會在/var/spool/cron/目錄下,創建以系統用戶用戶名為名稱的文件,在該文件中記錄了用戶設置的定時任務。定時任務的執行,該用戶必須存在於系統中。

  通過命令crontab -l,可以查看當前用戶設置的定時任務,如果要查看其它用戶設置的定時任務,可以是crontab -lu username,crontab -e是用來設置用戶的定時任務,實際上也就是編輯/var/spool/cron/下的文件。

  cron定時任務,在編寫定時任務時,也是有固定格式的,時間+執行的命令。具體可以看看cron的幫助信息,或者查看crontab文件內容。

 1 [bobo@localhost ~]$ cat /etc/crontab 
 2 SHELL=/bin/bash
 3 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 4 MAILTO=root
 5 HOME=/
 6 
 7 # For details see man 4 crontabs
 8 
 9 # Example of job definition:
10 # .---------------- minute (0 - 59)
11 # |  .------------- hour (0 - 23)
12 # |  |  .---------- day of month (1 - 31)
13 # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
14 # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
15 # |  |  |  |  |
16 # *  *  *  *  * user-name command to be executed

  這里詳細說明了定時任務的寫法,分鍾、小時、日期、月份、星期,定義了5個時間參數之后,后面是要執行的用戶命令,默認情況下,系統會每分鍾檢查定時任務是否要執行,執行后會給該定時任務的屬主發送mail。在日期填寫中,有特殊字符,比如*表示任意的某個時間點,在5個時間設置位上,表示任意分鍾、任意小時等等,也就是任意,如果是*/n,表示每n個單位,比如每5分鍾,*/5。下面,我們寫幾個定時任務,測試一下。

  使用普通用戶,創建定時任務,每分鍾向自己家目錄下的文件中增加一條日志記錄。

  首先,先測試一下命令是否可用,看是否能正常執行

 1 [bobo@localhost ~]$ echo this is a cron task >>$HOME/crontask
 2 [bobo@localhost ~]$ cat /home/bobo/crontask 
 3 this is a cron task
 4 [bobo@localhost ~]$ echo `date ` this is a cron task  
 5 Thu Mar 15 09:04:08 CST 2018 this is a cron task
 6 [bobo@localhost ~]$ echo `date ` this is a cron task >> $HOME/crontask
 7 [bobo@localhost ~]$ cat ~/crontask 
 8 this is a cron task
 9 Thu Mar 15 09:06:11 CST 2018 this is a cron task
10 [bobo@localhost ~]$ 

  然后將命令寫入文件中,可以通過crontab -e或者vim /var/spool/cron/username,進行編輯,然后通過crontab -l進行查看

1 [bobo@localhost ~]$ crontab -l
2 */1 * * * * echo `date` crontask runing >>$HOME/crontask

  我們可以通過tail -f 查看該文件的變化,每隔1分鍾,會增加一行內容記錄

  這樣,就可以說明,定時任務在正常執行。

 

定時任務書寫規范

  1、在編寫定時任務時,需要為定時任務增加注釋,讓其他人知道,這個定時任務是誰寫的,作用是什么。在crontab -e中,注釋以#開頭

  2、在編寫定時任務時,盡量用命令去執行,把要執行的命令寫入到shell腳本中,然后通過sh執行,然后將輸出結果寫入空設備,將錯誤結果輸出到空設備中,具體寫法是 1>/dev/null  2>&1,如果不這么寫,由於系統每次運行一次定時任務,就會給root用戶發送一封郵件,當系統沒有開啟郵件服務的時候,會在郵件maildrops目錄中生產大量的小文件,這樣的小文件,雖然不會占用系統多大的容量,但是會占用系統大量的inode,當系統的inode耗盡時,系統將無法再次寫入文件。

  當啟用了postfix應用之后,改目錄會迅速發送完成,不再占用。

   

 

   所以,對於之前寫的那個定時任務,優化下,建立一個sh文件,將要執行的命令,寫入到sh文件中,然后在cron定時任務中,寫入注釋。

  

  

   

 

  


免責聲明!

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



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