首頁 > 軟體

cronatab週期性任務

2020-06-16 17:08:55

要執行週期性任務,要保證服務執行。服務名為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秒。

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-08/146565.htm


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