命令 | 作用 |
---|---|
sudo service cron status | 查看cron狀態(tài) |
sudo /etc/init.d/cron start | 啟動cron |
sudo /etc/init.d/cron stop | 關(guān)閉cron |
sudo /etc/init.d/cron restart | 重啟cron |
cron時間表
為cron時間表添加條目, 其格式為
min hour dayofmonth month dayofweek command
分布代表分 時 天 月 星期幾 數(shù)值范圍分別是 0-59: 0-23 :1-31: 1-12: 0-7
記住幾個特殊符號的含義:
corn時間表例子:
可以用三字符的文本值(mon、tue、wed、thu、fri、sat、sun)或數(shù)值(0為周日,6為周六)
來指定dayofweek表項。
cron目錄
如果腳本對精確的執(zhí)行時間要求不高,用預(yù)配置的cron腳本更方便
$ ls /etc/cron.*ly /etc/cron.daily: 0anacron apt-compat cracklib-runtime logrotate mlocate popularity-contest update-notifier-common apport bsdmainutils dpkg man-db passwd ubuntu-advantage-tools /etc/cron.hourly: /etc/cron.monthly: 0anacron /etc/cron.weekly: 0anacron man-db update-notifier-common
比如,如果腳本每天運行一次,只要將腳本復(fù)制到daily目錄,cron就會每天執(zhí)行它【根據(jù)/etc/crontab下配置的時間】
anacron
缺點:cron可以執(zhí)行一些定時任務(wù),但是如果這個時間點來了,但是此時linux系統(tǒng)正在關(guān)機中,那么這個定時任務(wù)不能執(zhí)行。即使系統(tǒng)再次開機,cron也不會去執(zhí)行哪些已經(jīng)錯過了的程序。
解決:anacron,開機時會自動運行關(guān)機期間的作業(yè)。前提是這個程序位于cron目錄之下。
應(yīng)用場景:anacron 用于以天為單位的頻率運行命令。它的工作與 cron 最大的不同在于,它假設(shè)機器不會一直開機。
anacron 工作原理
anacron 的任務(wù)被列在/etc/anacrontab
sudo cat /etc/anacrontab [sudo] password for ocean: # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/root LOGNAME=root # These replace cron's entries 1 5 cron.daily run-parts --report /etc/cron.daily 7 10 cron.weekly run-parts --report /etc/cron.weekly @monthly 15 cron.monthly run-parts --report /etc/cron.monthly
ununtu 通過調(diào)用 run-parts 命令,定時運行3個目錄下的所有腳本。
從上面可以看出,anacron 的運行頻率的最小時間是天。 【cron是分鐘】
$ ls -l /var/spool/anacron/ total 12 -rw------- 1 root root 9 Jun 1 10:25 cron.daily -rw------- 1 root root 9 May 27 11:01 cron.monthly -rw------- 1 root root 9 May 30 10:28 cron.weekly
anacron 程序使用自己的時間表來檢查工作目錄
時間表格式
period delay identifier command
anacron 會檢查任務(wù)是否已經(jīng)在period字段執(zhí)行的時間被執(zhí)行了,如果沒有,則等待delay字段中指定的分鐘數(shù)后,執(zhí)行command字段中指定的命令。
一旦任務(wù)被執(zhí)行,它會使用 job-id (時間戳文件名)字段中指定的名稱將日期記錄在 /var/spool/anacron 目錄中的時間戳文件中。
cron VS anacron
cron是linux自帶的守護進程,用來重復(fù)運行哪些被設(shè)定好了確定的運行時間的任務(wù),如果機器處于關(guān)機狀態(tài)并錯過了任務(wù)執(zhí)行時間,這個任務(wù)就無法執(zhí)行了
crontab(cron table的簡稱)既可以指cron用來定期執(zhí)行特定任務(wù)所需要的列表文件,又可以指用來創(chuàng)建、刪除、查看當前用戶(或者指定用戶)的crontab文件的命令。
anacron不是守護進程,可以看做是cron守護進程的某種補充程序,anacron是獨立的linux程序,被cron守護進程或者其他開機腳本啟動運行,可以每天、每周、每個月周期性地執(zhí)行一項任務(wù)(最小單位為天)。適合于可能經(jīng)常會關(guān)機的機器,當機器重新開機anacron程序啟動之后,anacron會檢查anacron任務(wù)是否在合適的周期執(zhí)行了,如果未執(zhí)行則在anacron設(shè)定好的延遲時間之后只執(zhí)行一次任務(wù),而不管任務(wù)錯過了幾次周期。舉個例子,比如你設(shè)定了一個每周備份文件的任務(wù),但是你的電腦因為你外出度假而處于關(guān)機狀態(tài)四周,當你回到家中開機后,anacron會在延遲一定時間之后只備份一次文件。由于發(fā)行版的不同,cron守護進程如何運行anacron會有所不同。
cron | anacron |
---|---|
它是守護進程 | 它不是守護進程 |
適合服務(wù)器 適合桌面/筆記本電腦 | |
可以讓你以分鐘級運行計劃任務(wù) | 只能讓你以天為基礎(chǔ)來運行計劃任務(wù) |
關(guān)機時不會執(zhí)行計劃任務(wù) | 如果計劃任務(wù)到期,機器是關(guān)機的,那么它會在機器下次開機后執(zhí)行計劃任務(wù) |
普通用戶和 root 用戶都可以使用 | 只有 root 用戶可以使用(使用特定的配置啟動普通任務(wù)) |
cron 和 anacron 主要的區(qū)別在于 cron 能在那些持續(xù)運行的機器上有效地運行,而 anacron 是針對那些會在一天內(nèi)或者一周內(nèi)會關(guān)機的機器。
參考:
https://blog.csdn.net/qq_32693119/article/details/79816097
https://www.cnblogs.com/daxian2012/articles/2589894.html
https://www.cnblogs.com/zhoul/p/9931664.html
https://www.linuxprobe.com/cron-anacron-work.html
到此這篇關(guān)于shell之定時周期性執(zhí)行腳本的方法示例的文章就介紹到這了,更多相關(guān)shell 定時周期性執(zhí)行腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!