16.Linux之計劃任務

1.簡介

    Crontab是一個用於設置週期性執行任務的工具,能夠設置按照分鐘、小時、天、周、月來執行。apache

    週期性執行的任務稱爲Cron Job,週期性執行的任務列表稱爲Cron Table。
服務器

    能夠在命令行終端經過執行crontab -l或者service crond status命令來查看Crontab是否正常按照和啓動。以下圖所示顯示服務器的Crontab服務已經處於運行狀態,對於root用戶來講尚未須要執行的計劃任務。
工具

    經過一個簡單示例來演示一下如何使用Crontab:*/1 * * * * date >> /tmp/date.log,每分鐘輸出當前時間到/tmp/date.log文件中。
spa

    第一步:執行命令crontab -e
命令行

    第二步:按下字母i鍵進入插入狀態,輸入*/1 * * * * date >> /tmp/date.logrest

    第三部:按下Esc鍵退出插入狀態,輸入:wq,保存並退出,此時定時任務設置完成
日誌

    第四部:執行命令tail -f /tmp/date.log,查看文件內容是不是一分鐘增長一行當前時間。確認後Ctrl + c退出便可。
crontab

    因此,總結一句話就是Linux計劃任務服務crond利用crontab工具來修改相關配置文件,從而實現定時任務。
字符串

2.實踐

  1. 配置格式說明test

    案例說明 :星號表示任什麼時候間都匹配,逗號表示匹配幾個固定時間,減號表示匹配時間段,斜線表示每隔一段時間

    天天晚上23:30重啓apache服務:30 23 * * * service httpd restart

    每個月1日、10日、20日的晚上23:30重啓apache服務:30 23 1,10,20 * * service httpd restart

    每個月1日至10日的晚上23:30重啓apache服務:30 23 1-10 * * service httpd restart

    每隔2分鐘重啓apache服務:*/2 * * * * service httpd restart、1-59/2 * * * * service httpd restart

    天天晚上23點到第二天7點,每隔1小時重啓apache服務:0 23-7/1 * * * service httpd restart

    天天晚上18點到23點,每隔30分鐘重啓apache服務:0,30 18-23 * * * service httpd restart

  2. crontab命令說明


    -u:指定查看或者編輯哪一個用戶的計劃任務,不指定用戶時默認爲當前登陸用戶

    -e:編輯計劃任務的配置文件

    -l:列出配置文件中的計劃任務列表

    案例說明:

    第一步:使用crontab -u root -e給root用戶增長計劃任務:1-59/2 * * * * echo "root's crontab execute..."

    第二步:使用crontab -u test -e給test用戶增長計劃任務:0-58/2 * * * * echo "test's crontab execute..."

    第三步:使用tail -f /var/log/cron查看計劃任務的執行歷史


  3. 配置文件說明

    全局配置文件:/etc/crontab,經過查看其內容發現其命令格式中多了一個指定用戶的地方。


    還有一些與該文件做用相似的配置文件:


    咱們能夠觀察/var/log/cron文件中的日誌內容:

    而經過crontab -e修改的內容並無在上面的配置文件中保存,那在哪裏呢?/var/spool/cron/。

3.常見錯誤

  1. 環境變量:經過expor設置的環境變量是不可以直接在計劃任務中直接使用的。

  2. 命令行雙引號中使用百分號%時,未加反斜線\

  3. 第三個和第五個域是「或」的的關係,即配置分鐘、小時、日、月、星期幾中的日和星期幾是或者的關係,不是而且的關係。

    如:每個月第一個星期日早晨1:59執行腳本test.sh

    錯誤的寫法:59 1 1-7 * 0 /root/test.sh

    正確的寫法:59 1 1-7 * * test `date + \%w` -eq 0 && /root/test.sh

    分析:錯誤的寫法錯誤的緣由在於1-7解析爲每個月的1日到7日,星號後面的0表明週日,因爲二者是或者的關係,因此真正表達的含義是每個月的1日到7日或者是週日的1:59執行腳本。

  4. 分鐘設置誤用

    在使用其餘單位進行設定週期時,分鐘不要設置爲星號*,要設置爲0。


補充:如何經過crontab實現以秒爲單位的計劃任務?

例:執行命令:date;sleep 0.5s;date,屢次執行後能夠感受到兩個date命令之間會有一段時間間隔

因此咱們能夠經過sleep與crontab結合的方式實現以秒爲單位的計劃任務。

*/1 * * * * echo "start"

*/1 * * * * sleep 30s;echo "start..."

分析以上兩個計劃任務,目的都是每分鐘輸出字符串「start...」,可是因爲第二個計劃任務在輸出字符串以前先sleep30秒,這樣就和第一個計劃任務隔開了30秒的時間,可是實現了統一計劃任務的以秒爲單位來執行的目的。

相關文章
相關標籤/搜索