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