Linux之計(jì)劃任務(wù)和調(diào)度命令at/cron詳解
Linux計(jì)劃任務(wù)和調(diào)度命令at/cron
一、計(jì)劃任務(wù)
進(jìn)程是由程序執(zhí)行后才產(chǎn)生的。程序的執(zhí)行可以通過兩種方法之一可以實(shí)現(xiàn)
- 手動(dòng)執(zhí)行
- 利用調(diào)度任務(wù),依據(jù)一定的條件自動(dòng)執(zhí)行。就像windows中的計(jì)劃任務(wù)
如果打算讓程序自動(dòng)執(zhí)行,您可以使用下面的命令來得已實(shí)現(xiàn):
at
cron
二、命令{at}介紹
由atd服務(wù)負(fù)責(zé)并管理的。屬于at的守護(hù)進(jìn)程??赏ㄟ^如下指令查看、啟動(dòng)、關(guān)閉atd。
#systemctl stop atd #systemctl start atd #systemctl restart atd #systemctl status atd
at,這是一個(gè)一次性的計(jì)劃任務(wù)。at的執(zhí)行主要依靠系統(tǒng)服務(wù)atd。系統(tǒng)中有2個(gè)文件
- /etc/at.allow
- /etc/at.deny
這2個(gè)文件規(guī)定了系統(tǒng)誰可以使用at,誰不可以使用。超級(jí)用戶隨時(shí)可以使用at。其他用戶則要受到以上2個(gè)文件的限制。
總結(jié)如下:
- 如果2個(gè)文件都存在,只檢查/etc/at.allow,只有在/etc/at.allow中規(guī)定的用戶才可以使用。
- 如果只有/etc/at.deny存在,每個(gè)在該文件中不存在的用戶都可以使用。
- 如果2個(gè)文件都不存在,只有超級(jí)用戶可以使用。
三、命令語法及功能 :at
- 語法:at [ 選項(xiàng) ] [time]
- 功能 : 依據(jù)預(yù)先定義好的時(shí)間 , 執(zhí)行指定進(jìn)程
1)at可接受的時(shí)間格式
1、日期
- MM/DD/YY
- MMDDYY
- DD.MM.YY
2、時(shí)間
- HH:MM
- HH:MMam
- HH:MMpm
3、特殊日期
midnight(0am) noon(0pm) teatime(4pm) now( 現(xiàn)在 ) now + N(minutes,hours,days,weeks) eg1: at 23:00 at>reboot at><EOT> ← 按 ^D 得到此符號(hào) , 意味結(jié)束 eg2: at now at>ls at><EOT>
2)時(shí)間輸入規(guī)范 :
- 只輸入時(shí)間.不輸入日期,會(huì)被認(rèn)為是在今天的某個(gè)時(shí)刻。
- 如果只輸入日期,不輸入時(shí)間,被認(rèn)為是被輸入日期的現(xiàn)在這個(gè)時(shí)刻。
- 支持輸入一個(gè)完整的時(shí)間。
at時(shí)間格式
eg:
#at 23:00 #at 12/31/13 #at 23:00 12/31/13 #at noon #at 0:00pm 12/31/13 #at teatime + 30 minutes(下午四點(diǎn)后的30分鐘) #at 4:00pm + 4 days(從下午4點(diǎn)的4天) #at now + 4 weeks(從現(xiàn)在起的4周)
3)at 隊(duì)列管理
at在編輯后,將進(jìn)入隊(duì)列中。由atd服務(wù)掃描任務(wù)并等待任務(wù)的執(zhí)行
1/查看at隊(duì)列可使用下面命令
- 命令:atq
- 功能:查看at隊(duì)列
- 結(jié)構(gòu)語法:atq [ 選項(xiàng) ]
at在編輯后,如打算查看某個(gè)任務(wù)隊(duì)列的信息及準(zhǔn)備執(zhí)行的命令,可按如下命令執(zhí)行:
#at -c at隊(duì)列ID
2/at編輯后,隊(duì)列等待執(zhí)行。如取消預(yù)定的at任務(wù),可以使用 atrm完成取消動(dòng)作。
- 命令:atrm
- 功能:刪除at隊(duì)列中的指定任務(wù)
- 結(jié)構(gòu)語法:atrm [ 選項(xiàng) ] [ 隊(duì)列 ID]
四、命令{cron}介紹
cron與at最大區(qū)別,在于cron屬于依據(jù)指定周期執(zhí)行預(yù)定任務(wù)。cron的守護(hù)進(jìn)程為crond。
#systemctl stop crond #systemctl start crond #systemctl restart crond #systemctl status crond
五、cron語法及功能
- 命令:crontab
- 功能:實(shí)現(xiàn)周期性計(jì)劃任務(wù)的執(zhí)行
- 語法格式:crontab [ 選項(xiàng) ]
選項(xiàng):
- -l 查看cron計(jì)劃任務(wù)列表。
- -e 以默認(rèn)文本編輯器,編輯cron計(jì)劃任務(wù)列表。
- -r 刪除cron計(jì)劃任務(wù)列表。
- -u 指定用戶。如果不指定用戶,-l,-e,-r都認(rèn)為是對(duì)當(dāng)前用戶操作。
(1)cron編輯的格式:
1)shell及mail格式定義
SHELL=/bin/bash
SHELL 指定以哪個(gè)shell來處理計(jì)劃任務(wù)的命令。
MAILTO=root
MAILTO 指定運(yùn)行完計(jì)劃任務(wù)或者是運(yùn)行是遇到障礙,都會(huì)發(fā)郵件給某個(gè)用戶,給以提示。
2)時(shí)間格式定義
- 分鐘 0-59
- 小時(shí) 0-23
- 每月中的第幾天 1-31
- 月 1-12
- 星期 0-7
//* 星期中0,7同樣表示周日
- “*” 在第一列,能夠代表每一分鐘。
- “*” 在第二列,能夠代表每一小時(shí)。
- “*” 在第三列,能夠代表一個(gè)月中的每一天。
- “*” 在第四列,能夠代表一年中的每個(gè)月。
- “*” 在第五列,能夠代表一個(gè)星期中的每一天。
3) 特殊時(shí)間格式定義
連續(xù)的情況,以小時(shí)舉例
1,2,3,4,5,8,9,10 可以這樣寫 1-5,8-10 。
周期間隔
如每隔5分鐘可在第一列寫成:
*/5
4)cron格式
* * * * * 所需要執(zhí)行的命令及路徑
eg:
0 0 1 1 * echo “Happy New Year”
示例
0 */2 13 * 5 /usr/bin/wall be careful,dark friday!
代表黑色星期五,每隔2小時(shí),向用戶發(fā)出提示。
0 20 * * 1-5 /sbin/shutdown -h now
從周1到周5,每天晚上8點(diǎn),自動(dòng)關(guān)機(jī)。
(2)cron編寫任務(wù)
1. 以當(dāng)前賬戶創(chuàng)建cron計(jì)劃任務(wù)
#crontab -e
2. 以指定用戶創(chuàng)建其cron計(jì)劃任務(wù)(僅root)
#crontab -e -u snow
3. 以指定文件作為計(jì)劃任務(wù)的要求
#vim newcron */5 * * * * wall hello #crontab newcron 或 #crontab -u snow newcron
(3)查看cron任務(wù)隊(duì)列
1) 查看當(dāng)前使用賬戶的cron隊(duì)列
#crontab -l
2) 查看其他賬戶的cron隊(duì)列(僅root可以查看其他用戶的cron隊(duì)列)
#crontab -l -u snow
(4)清除cron任務(wù)隊(duì)列
1)清除當(dāng)前使用賬戶的cron隊(duì)列
#crontab -r
2清除其他賬戶的cron隊(duì)列(僅root可以查看其他用戶的cron隊(duì)列)
#crontab -r -u snow
(5)相關(guān)配置文件
/etc/crontab 系統(tǒng)計(jì)劃任務(wù)表及說明。 /etc/cron.d 特定的系統(tǒng)計(jì)劃任務(wù)表 /etc/cron.hourly 系統(tǒng)每小時(shí)要運(yùn)行的計(jì)劃任務(wù)。 /etc/cron.daily 系統(tǒng)每天要運(yùn)行的計(jì)劃任務(wù)。 /etc/cron.weekly 系統(tǒng)每個(gè)星期要運(yùn)行的計(jì)劃任務(wù)。 /etc/cron.monthly 系統(tǒng)每個(gè)月要運(yùn)行的計(jì)劃任務(wù)。
雖然/etc/cron.hourly等目錄中全部是shell腳本,但在/etc/cron.d/0hourly文件中,規(guī)定了使用run-parts命令來執(zhí)行指定的目錄腳本文件。這就使得這些上述shell腳本目錄的任務(wù)得以執(zhí)行。
使用run-parts腳本來執(zhí)行
/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
以上目錄中的腳本,這些腳本被相應(yīng)地每小時(shí)、每日、每周、或每月執(zhí)行。這些目錄中的文件應(yīng)該是shell腳本。
run-parts是一個(gè)腳本,在/usr/bin/run-parts,作用是執(zhí)行一個(gè)目錄下的所有腳本/程序。
六、anacron
cron的計(jì)劃任務(wù)執(zhí)行必須保持計(jì)算機(jī)處于開啟狀態(tài)。如果關(guān)機(jī)或在指定的時(shí)間沒有執(zhí)行,將只能等待下一個(gè)周期。而anacron不同,如果在指定的時(shí)間沒有成功執(zhí)行,則會(huì)在一段時(shí)間之內(nèi)于所指定的重試時(shí)間再次執(zhí)行
anacron配置文件
#vim /etc/anacrontab
格式
- 時(shí)間間隔(默認(rèn)為天,@monthly為1個(gè)月內(nèi)執(zhí)行)
- 等待間隔(默認(rèn)為分鐘)
- 任務(wù)標(biāo)識(shí)
命令
說明:
- 時(shí)間間隔:執(zhí)行任務(wù)的時(shí)間間隔
- 等待間隔:時(shí)間間隔到期后,任務(wù)沒有執(zhí)行,則使用此處設(shè)置時(shí)間再次嘗試執(zhí)行
- 任務(wù)標(biāo)識(shí):任務(wù)說明
- 命令:實(shí)際所執(zhí)行的任務(wù)
period(頻率.天數(shù)) delay(延遲,分鐘) job-identifier command
- 第一行的意思是:每天開機(jī)5分鐘后就檢查cron.daily文件是否被執(zhí)行了,如果今天沒有被執(zhí)行就執(zhí)行他
- 第二行的意思是:每隔7天開機(jī)后25分鐘檢查cron.weekly文件是否被執(zhí)行了,如果一周內(nèi)沒有被執(zhí)行就執(zhí)行他
- 第三行的意思是:每月開機(jī)45分鐘后就檢查cron.monthly文件是否被執(zhí)行了,如果今天沒有被執(zhí)行就執(zhí)行他
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Windows7下Linux雙操作系統(tǒng)安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows7下Linux雙操作系統(tǒng)安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07Linux中Oracle服務(wù)啟動(dòng)和停止腳本與開機(jī)自啟動(dòng)
這篇文章主要介紹了Linux中Oracle服務(wù)啟動(dòng)和停止腳本與開機(jī)自啟動(dòng),有興趣的同學(xué)可以一起來了解一下。2016-12-12apache .htaccess文件詳解和配置技巧總結(jié)
這篇文章主要介紹了apache .htaccess文件詳解和配置技巧總結(jié),需要的朋友可以參考下2014-04-04Linux有限狀態(tài)機(jī)FSM的理解與實(shí)現(xiàn)
這篇文章主要幫助大家理解與實(shí)現(xiàn)Linux有限狀態(tài)機(jī)FSM,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Linux下如何檢查網(wǎng)卡bonding狀態(tài)和切換主備網(wǎng)卡
這篇文章主要介紹了Linux下如何檢查網(wǎng)卡bonding狀態(tài)和切換主備網(wǎng)卡問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11