要執行周期性任務,要保證服務運行。服務名為crond;service crond start ; systemctl start crond; 配置文件 /etc/crontab cron的日誌文件 cat /var/log/cron 一、簡介 crond是linux下用來周期性的執行某種任務或等待 ...
要執行周期性任務,要保證服務運行。服務名為crond;service crond start ; systemctl start crond;
配置文件
/etc/crontab
cron的日誌文件
cat /var/log/cron
一、簡介
crond是linux下用來周期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務類似,當安裝完成操作系統後,預設會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
二、任務調度的分類
Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬碟、日誌清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。
1.系統任務調度
通過編輯配置文件/etc/crontab,以下圖的格式標明需要運行的時間即可。一行對應一個任務,格式如下圖。
2.用戶任務調度
在當前用戶下使用命令crontab -e
,會以當前用戶的身份建立任務調度。與系統任務調度文件格式不同的是不需要指名以哪個用戶的身份運行。
3.時間表示
- 指定值:指定具體的數字
- 範圍值:* 表示每,每到這這個時間段執行一次任務。
- 離散取值:10 2,3,4 * * *;每天的2,3,4點的10分執行一次。(總共執行了3次)
- 連續範圍: 10 2-10 * * *;每天的2點10分到10點10分分別執行(總共執行了8次)
- 步長範圍:/3 * * ;每分鐘內執行3次(即每20秒執行一次)
舉例:
10 10 /6 * *;每6天的10點10分執行一次任務 - 日期與星期
10 10 1-10 * 0,6 #每個月的1-10號的10點10分,或者周六日的10點10分都執行
舉例:
1 1 /6 * root echo "hello word " ;每隔6天的1點1分執行一次任務。
1 1-10/3 * * * root echo “hello word”;在每天1-10點範圍內每3小時內的第一分鐘執行一次
4.創建周期性任務
crontab -e
* * * * * /bin/echo "`date +\%F \%H:\%M:\%S`"
#命令要寫絕對路徑。除非標明變數
#如果在用戶下新建crontab的話%需要轉義
5.創建時的其他設置
創建周期性任務時,預設的編輯器為vi所以沒有語法高亮。可以通過以下辦法將預設編輯器修改為vim
#寫入/etc/porfile.d 對所有用戶生效
#寫入~/bash_profile 對當前用戶
export EDITOP=vim
6.創建任務的許可權
- 允許指定用戶創建任務
cat /etc/cron.deny #在文件內寫入用戶名,使其不能創建新任務,但已創建的依然會執行 - 拒絕指定用戶創建任務
cat /etc/cron.allow #預設文件不存在 - 允許與拒絕優先順序
如果allow文件存在,那麼deny文件不生效。
如果allow為空,拒絕所有用戶
如果allow、deny都不存在,任何用戶不能創建計劃任務
7.實現毫秒、秒級別的周期性任務
- 利用usleep實現微妙級別的運行
usleep 1000000;1秒
usleep 1000;1毫秒
usleep 1;1微秒 - 利用迴圈體加sleep實現秒級別的。在每分鐘要執行的任務中sleep20秒。