詳解在Linux中怎么使用cron計劃任務(wù)

發(fā)布時間:2024-02-25
服務(wù)器
沒有時間運(yùn)行命令?使用 cron 的計劃任務(wù)意味著你不用熬夜程序也可以運(yùn)行。
系統(tǒng)管理員(在許多好處中)的挑戰(zhàn)之一是在你該睡覺的時候去運(yùn)行一些任務(wù)。例如,一些任務(wù)(包括定期循環(huán)運(yùn)行的任務(wù))需要在沒有人使用計算機(jī)資源的時候去運(yùn)行,如午夜或周末。在下班后,我沒有時間去運(yùn)行命令或腳本。而且,我也不想在晚上去啟動備份或重大更新。
取而代之的是,我使用兩個服務(wù)功能在我預(yù)定的時間去運(yùn)行命令、程序和任務(wù)。cron 和 at 服務(wù)允許系統(tǒng)管理員去安排任務(wù)運(yùn)行在未來的某個特定時間。at 服務(wù)指定在某個時間去運(yùn)行一次任務(wù)。cron 服務(wù)可以安排任務(wù)在一個周期上重復(fù),比如天、周、或月。
在這篇文章中,我將介紹 cron 服務(wù)和怎么去使用它。
常見(和非常見)的 cron 用途
我使用 cron 服務(wù)去安排一些常見的事情,比如,每天凌晨 2:00 發(fā)生的定期備份,我也使用它去做一些不常見的事情。
許多電腦上的系統(tǒng)時鐘(比如,操作系統(tǒng)時間)都設(shè)置為使用網(wǎng)絡(luò)時間協(xié)議(ntp)。 ntp 設(shè)置系統(tǒng)時間后,它不會去設(shè)置硬件時鐘,它可能會“漂移”。我使用 cron 基于系統(tǒng)時間去設(shè)置硬件時鐘。
我還有一個 bash 程序,我在每天早晨運(yùn)行它,去在每臺電腦上創(chuàng)建一個新的 “每日信息” (motd)。它包含的信息有當(dāng)前的磁盤使用情況等有用的信息。
許多系統(tǒng)進(jìn)程和服務(wù),像 logwatch、logrotate、和 rootkit hunter,使用 cron 服務(wù)去安排任務(wù)和每天運(yùn)行程序。
crond 守護(hù)進(jìn)程是一個完成 cron 功能的后臺服務(wù)。
cron 服務(wù)檢查在 /var/spool/cron 和 /etc/cron.d 目錄中的文件,以及 /etc/anacrontab 文件。這些文件的內(nèi)容定義了以不同的時間間隔運(yùn)行的 cron 作業(yè)。個體用戶的 cron 文件是位于 /var/spool/cron,而系統(tǒng)服務(wù)和應(yīng)用生成的 cron 作業(yè)文件放在 /etc/cron.d 目錄中。/etc/anacrontab 是一個特殊的情況,它將在本文中稍后部分介紹。
使用 crontab
cron 實(shí)用程序運(yùn)行基于一個 cron 表(crontab)中指定的命令。每個用戶,包括 root,都有一個 cron 文件。這些文件缺省是不存在的。但可以使用 crontab -e 命令創(chuàng)建在 /var/spool/cron 目錄中,也可以使用該命令去編輯一個 cron 文件(看下面的腳本)。我強(qiáng)烈建議你,不要使用標(biāo)準(zhǔn)的編輯器(比如,vi、vim、emacs、nano、或者任何其它可用的編輯器)。使用 crontab 命令不僅允許你去編輯命令,也可以在你保存并退出編輯器時,重啟動 crond 守護(hù)進(jìn)程。crontab 命令使用 vi 作為它的底層編輯器,因?yàn)?vi 是預(yù)裝的(至少在大多數(shù)的基本安裝中是預(yù)裝的)。
現(xiàn)在,cron 文件是空的,所以必須從頭添加命令。 我增加下面示例中定義的作業(yè)到我的 cron 文件中,這是一個快速指南,以便我知道命令中的各個部分的意思是什么,你可以自由拷貝它,供你自己使用。
# crontab -eshell=/bin/bashmailto=root@example.compath=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin# for details see man 4 crontabs# example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) or jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (sunday=0 or 7) or sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed# backup using the rsbu program to the internal 4tb hdd and then 4tb external01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2# set the hardware clock to keep it in sync with the more accurate system clock03 05 * * * /sbin/hwclock --systohc# perform monthly updates on the first of the month# 25 04 1 * * /usr/bin/dnf -y updatecrontab 命令用于查看或編輯 cron 文件。
上面代碼中的前三行設(shè)置了一個缺省環(huán)境。對于給定用戶,環(huán)境變量必須是設(shè)置的,因?yàn)?,cron 不提供任何方式的環(huán)境。shell 變量指定命令運(yùn)行使用的 shell。這個示例中,指定為 bash shell。mailto 變量設(shè)置發(fā)送 cron 作業(yè)結(jié)果的電子郵件地址。這些電子郵件提供了 cron 作業(yè)(備份、更新、等等)的狀態(tài),和你從命令行中手動運(yùn)行程序時看到的結(jié)果是一樣的。第三行為環(huán)境設(shè)置了 path 變量。但即使在這里設(shè)置了路徑,我總是使用每個程序的完全限定路徑。
在上面的示例中有幾個注釋行,它詳細(xì)說明了定義一個 cron 作業(yè)所要求的語法。我將在下面分別講解這些命令,然后,增加更多的 crontab 文件的高級特性。
01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2在我的 /etc/crontab 中的這一行運(yùn)行一個腳本,用于為我的系統(tǒng)執(zhí)行備份。
這一行運(yùn)行我自己編寫的 bash shell 腳本 rsbu,它對我的系統(tǒng)做完全備份。這個作業(yè)每天的凌晨 1:01 (01 01) 運(yùn)行。在這三、四、五位置上的星號(*),像文件通配符一樣代表一個特定的時間,它們代表 “一個月中的每天”、“每個月” 和 “一周中的每天”,這一行會運(yùn)行我的備份兩次,一次備份內(nèi)部專用的硬盤驅(qū)動器,另外一次運(yùn)行是備份外部的 usb 驅(qū)動器,使用它這樣我可以很保險。
接下來的行我設(shè)置了一個硬件時鐘,它使用當(dāng)前系統(tǒng)時鐘作為源去設(shè)置硬件時鐘。這一行設(shè)置為每天凌晨 5:03 分運(yùn)行。
03 05 * * * /sbin/hwclock --systohc這一行使用系統(tǒng)時間作為源來設(shè)置硬件時鐘。
我使用的第三個也是最后一個的 cron 作業(yè)是去執(zhí)行一個 dnf 或 yum 更新,它在每個月的第一天的凌晨 04:25 運(yùn)行,但是,我注釋掉了它,以后不再運(yùn)行。
# 25 04 1 * * /usr/bin/dnf -y update這一行用于執(zhí)行一個每月更新,但是,我也把它注釋掉了。
其它的定時任務(wù)技巧
現(xiàn)在,讓我們?nèi)プ鲆恍┍然局R更有趣的事情。假設(shè)你希望在每周四下午 3:00 去運(yùn)行一個特別的作業(yè):
00 15 * * thu /usr/local/bin/mycronjob.sh上面這一行會在每周四下午 3:00 運(yùn)行 mycronjob.sh 這個腳本。
或者,或許你需要在每個季度末去運(yùn)行一個季度報告。cron 服務(wù)沒有為 “每個月的最后一天” 設(shè)置選項(xiàng),因此,替代方式是使用下一個月的第一天,像如下所示(這里假設(shè)當(dāng)作業(yè)準(zhǔn)備運(yùn)行時,報告所需要的數(shù)據(jù)已經(jīng)準(zhǔn)備好了)。
02 03 1 1,4,7,10 * /usr/local/bin/reports.sh在季度末的下一個月的第一天運(yùn)行這個 cron 作業(yè)。
下面展示的這個作業(yè),在每天的上午 9:01 到下午 5:01 之間,每小時運(yùn)行一次。
01 09-17 * * * /usr/local/bin/hourlyreminder.sh有時,你希望作業(yè)在業(yè)務(wù)期間定時運(yùn)行。
我遇到一個情況,需要作業(yè)在每二、三或四小時去運(yùn)行。它需要用期望的間隔去劃分小時,比如, */3 為每三個小時,或者 6-18/3 為上午 6 點(diǎn)到下午 6 點(diǎn)每三個小時運(yùn)行一次。其它的時間間隔的劃分也是類似的。例如,在分鐘位置的表達(dá)式 */15 意思是 “每 15 分鐘運(yùn)行一次作業(yè)”。
*/5 08-18/2 * * * /usr/local/bin/mycronjob.sh這個 cron 作業(yè)在上午 8:00 到下午 18:59 之間,每五分鐘運(yùn)行一次作業(yè)。
需要注意的一件事情是:除法表達(dá)式的結(jié)果必須是余數(shù)為 0(即整除)。換句話說,在這個例子中,這個作業(yè)被設(shè)置為在上午 8 點(diǎn)到下午 6 點(diǎn)之間的偶數(shù)小時每 5 分鐘運(yùn)行一次(08:00、08:05、 08:10、 08:15……18:55 等等),而不運(yùn)行在奇數(shù)小時。另外,這個作業(yè)不能運(yùn)行在下午 7:00 到上午 7:59 之間。(lctt 譯注:此處本文表述有誤,根據(jù)正確情況修改)
我相信,你可以根據(jù)這些例子想到許多
上一個:筆記本電腦cpu性能排行最新(2021筆記本cpu性能排行榜)
下一個:產(chǎn)品推薦丨農(nóng)林業(yè)專用智能蟲情測報儀

園林景觀設(shè)計步驟有哪些
安裝win10卡在21%(win1021h2安裝失敗)
股權(quán)轉(zhuǎn)讓產(chǎn)生的稅費(fèi)由誰承擔(dān)
賺錢游戲排行榜前十名(賺錢游戲排行榜1717)
RC0402DR-072R7L,0402 2.7Ω 0.5%電阻
辦公建筑表皮設(shè)計有哪些原則?
安卓手機(jī)如何安裝推特app(安卓如何安裝twitter)
微信接龍為什么不顯示進(jìn)入接龍表格(微信接龍為什么不顯示自己)
A1502pro內(nèi)存怎么加大內(nèi)存,Macbook pro a1502能改裝嗎比如升級內(nèi)存什么的
茶,透著靜,藏著淡
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos