與crond不同的是,at任務(wù)調(diào)度是一次性的,而crond是重復(fù)性的
慈溪ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!
1.1 at命令是一次性定時(shí)計(jì)劃任務(wù),at的守護(hù)進(jìn)程atd會(huì)以后臺(tái)模式運(yùn)行,檢查作業(yè)隊(duì)列來(lái)運(yùn)行
1.2 默認(rèn)情況下,atd守護(hù)進(jìn)程每60s檢查作業(yè)隊(duì)列,有作業(yè)時(shí),會(huì)檢查作業(yè)運(yùn)行時(shí)間,如果時(shí)間與當(dāng)前時(shí)間匹配,則運(yùn)行此作業(yè)
1.3 at命令是一次性定時(shí)計(jì)劃任務(wù),執(zhí)行完一個(gè)任務(wù)后就不再執(zhí)行這個(gè)任務(wù)了
1.4 在使用at命令的時(shí)候,一定要保證atd進(jìn)程的啟動(dòng),可以使用相關(guān)指令查看
ps -ef | grep atd 可以檢查atd是否在運(yùn)行
at [選項(xiàng)] [時(shí)間]
按兩次 ctrl+d 結(jié)束at命令的輸入
4.1 當(dāng)天的hh:mm(小時(shí):分鐘),假如這個(gè)時(shí)間已經(jīng)過(guò)去,那么就第二天的這個(gè)時(shí)間執(zhí)行。例如04:00
4.2 模糊的詞語(yǔ),例如midnight、noon、teatime(下午茶時(shí)間,16:00左右)
4.3 采用12小時(shí)計(jì)時(shí)制,例如8am
4.4 指定執(zhí)行命令的具體日期,格式為month dat(月 日)或者mm/dd/yy或者dd.mm.yy,指定的日期必須跟著寫(xiě)在在指定時(shí)間的后面,例如:04:00 2021-3-1就是2021年3月1日凌晨4點(diǎn)整執(zhí)行
4.5 相對(duì)計(jì)時(shí)法,指定格式為now + count time-units,now就是當(dāng)前時(shí)間,time-units是時(shí)間單位,可以是minutes、hours、days、weeks。count是時(shí)間的數(shù)量,例如:now + 5 minutes
4.6 直接用today、tomorrow來(lái)指定完成命令的時(shí)間
5.1 2天后的下午5點(diǎn),執(zhí)行/bin/ls /home指令
at 5pm + 2 days 按回車(chē)鍵
然后寫(xiě)下那個(gè)時(shí)刻要執(zhí)行命令 /bin/ls /home
最后按兩次ctrl+d退出at指令
5.2 atq指令可以直接執(zhí)行,查看系統(tǒng)中待執(zhí)行的工作任務(wù)
5.3 明天17:00輸出時(shí)間到指定文件內(nèi) /root/date100.log
at 17:00 tomorrow 按回車(chē)鍵
date /root/date100.log
按兩次ctrl+d退出at指令的輸入
5.4 2分鐘后
at now + 2 minutes
5.5 刪除已經(jīng)設(shè)置的任務(wù),atrm 編號(hào)
可以用atq列出待執(zhí)行的任務(wù),列出后第一列就是job編號(hào)
一次性定時(shí)計(jì)劃任務(wù)的at命令的用法!
1.命令格式:
at[參數(shù)][時(shí)間]
2.命令功能:
在一個(gè)指定的時(shí)間執(zhí)行一個(gè)指定任務(wù),只能執(zhí)行一次,且需要開(kāi)啟atd進(jìn)程(
ps -ef | grep atd查看, 開(kāi)啟用/etc/init.d/atd start or restart; 開(kāi)機(jī)即啟動(dòng)則需要運(yùn)行 chkconfig --level 2345 atd on)。
3.命令參數(shù):
-m 當(dāng)指定的任務(wù)被完成之后,將給用戶發(fā)送郵件,即使沒(méi)有標(biāo)準(zhǔn)輸出
-I atq的別名
-d atrm的別名
-v 顯示任務(wù)將被執(zhí)行的時(shí)間
-c 打印任務(wù)的內(nèi)容到標(biāo)準(zhǔn)輸出
-V 顯示版本信息
-q列隊(duì) 使用指定的列隊(duì)
-f文件 從指定文件讀入任務(wù)而不是從標(biāo)準(zhǔn)輸入讀入
-t時(shí)間參數(shù) 以時(shí)間參數(shù)的形式提交要運(yùn)行的任務(wù) 《Linux就該這么學(xué)》
使用實(shí)例:
實(shí)例1:三天后的下午 5 點(diǎn)鍾執(zhí)行 /bin/ls
命令:
at 5pm+3 days
輸出:
[root@localhost ~]# at 5pm+3 days
at /bin/ls
at EOT
job 7 at 2013-01-08 17:00
[root@localhost ~]#
說(shuō)明:
實(shí)例2:明天17點(diǎn)鐘,輸出時(shí)間到指定文件內(nèi)
命令:
at 17:20 tomorrow
輸出:
[root@localhost ~]# at 17:20 tomorrow
at date /root/2013.log
at EOT
job 8 at 2013-01-06 17:20
at命令
at:計(jì)劃任務(wù),在特定的時(shí)間執(zhí)行某項(xiàng)工作,在特定的時(shí)間執(zhí)行一次。
格式:at+時(shí)間
例1:date //查看系統(tǒng)當(dāng)前時(shí)間
at 時(shí)間 //系統(tǒng)計(jì)劃啟動(dòng)任務(wù)時(shí)間
at date /root/1.txt //date:系統(tǒng)計(jì)劃啟動(dòng)任務(wù)時(shí)間執(zhí)行date命令;/root/1.txt執(zhí)行命令寫(xiě)入位
置和文件
ctrl+d退出 //退出at命令
例2:date //查看系統(tǒng)當(dāng)前時(shí)間
at 時(shí)間 //系統(tǒng)計(jì)劃啟動(dòng)任務(wù)時(shí)間
at init 0 /root/2.txt //init 0:系統(tǒng)計(jì)劃啟動(dòng)任務(wù)時(shí)間執(zhí)行init 0(關(guān)機(jī))命令;/root/2.txt執(zhí)
行命令寫(xiě)入位置和文件
例3:在固定時(shí)間內(nèi)添加一個(gè)用戶(這時(shí)建立的用戶沒(méi)有密碼)
#at 12:00(時(shí)間) //at命令設(shè)定12:00執(zhí)行一項(xiàng)操作
atuseradd aaa //在at命令里設(shè)定添加用戶aaa
ctrl+d //退出at命令
tail -f /etc/passwd //查看/etc/passwd文件后十行是否增加了一個(gè)用戶aaa
計(jì)劃任務(wù)結(jié)束后,查看任務(wù)是否寫(xiě)入文件中,可以用cat或vi命令查看。
格式:cat(vi)+(路徑)文件名
例1:cat(vi) 1.txt
日 2月 6 09:21:28 CST 2005
計(jì)劃任務(wù)設(shè)定后,在沒(méi)有執(zhí)行之前我們可以用atq命令來(lái)查看系統(tǒng)沒(méi)有執(zhí)行工作任務(wù)。
格式:atq
例:atq
1 2005-02-06 09:23 a root
啟動(dòng)計(jì)劃任務(wù)后,如果不想啟動(dòng)設(shè)定好的計(jì)劃任務(wù)可以使用atrm命令刪除。
格式:atrm+任務(wù)號(hào)
例:atrm 1 //刪除計(jì)劃任務(wù)1
atq //查看計(jì)劃任務(wù)是否刪除
還可以進(jìn)入到/var/spool/at目錄里把計(jì)劃任務(wù)刪除,計(jì)劃任務(wù)的文件都保存在該目錄里,可以用rm -f
文件名來(lái)刪除(以文件的形式刪除計(jì)劃任務(wù),因?yàn)橛?jì)劃任務(wù)是以文件形式保存在該目錄中)
例:#cd /var/spool/at //進(jìn)入到/var/spool/at目錄中
ls //顯示目錄中所有文件
rm -f a0000a0119b0df //刪除計(jì)劃任務(wù)
在通常情況下,超級(jí)用戶都可以使用這個(gè)命令。對(duì)于其他用戶來(lái)說(shuō),能否可以使用就取決于兩個(gè)文
件:/etc/at.allow和/etc/at.deny。
當(dāng)“用戶名”寫(xiě)入/etc/at.deny中,用戶不能執(zhí)行at命令(管理員限制用戶使用at命令)。
例:useradd text //新建一個(gè)text用戶
ls /etc/at.deny //查看at.deny文件內(nèi)容
vi /etc/at.deny //對(duì)at.deny文件進(jìn)行編輯
text //對(duì)at.deny文件進(jìn)行編輯,寫(xiě)入text用戶名,進(jìn)行at命令限制,然后wq(保存退出)
cat /etc/at.deny //顯示at.deny文件內(nèi)容
su - text //切換到text用戶
at 12:00 //text用戶執(zhí)行at命令,如果被限制則出現(xiàn)下面的提示。
You do not have permission to use at.你不允許使用at這個(gè)命令
at.allow比at.deny優(yōu)先級(jí)高
at.allow文件中有的用戶可以執(zhí)行at,沒(méi)有則不能。
linux操作系統(tǒng)在執(zhí)行用戶是否可以執(zhí)行at命令時(shí),先看at.allow文件沒(méi)有才看at.deny文件。
注意:linux操作系統(tǒng)默認(rèn)沒(méi)有/etc/at.allow文件。
例:ls /etc/at.allow //查看是否已經(jīng)建立at.allow文件
touch /etc/at.allow //建立/etc/at.allow文件
vi /etc/at.allow //對(duì)at.allow文件進(jìn)行編輯
text //對(duì)at.allow文件進(jìn)行編輯,寫(xiě)入text用戶名,該用戶名可以執(zhí)行at命令,然后wq(保存退出)。
su - text //切換到text用戶
at 12:00 //text用戶執(zhí)行at命令,若不出現(xiàn)上面所說(shuō)的提示就可以進(jìn)行at命令設(shè)定了。
at命令格式
at HH:MM YYYY-MM-DD //HH(小時(shí)):MM(分鐘) YYYY(年)-MM(月份)-DD(日)
例:at 4:00 2004-11-27
HH[am pm]+D(天) days //HH(小時(shí))[am(上午)pm(下午)]+days(天)
例:4pm + 3days :3天以后下午4:00執(zhí)行at命令設(shè)定的計(jì)劃任務(wù)。
Linux下,有兩個(gè)命令可以用來(lái)作為計(jì)劃任務(wù)而執(zhí)行,
要使用一次性任務(wù)計(jì)劃,linux必須要有負(fù)責(zé)這個(gè)計(jì)劃任務(wù)的服務(wù),那就是atd服務(wù)
但是并非所有的linux distribution都默認(rèn)會(huì)打開(kāi),我們需要手動(dòng)激活?lèi)?ài)聽(tīng)的任務(wù)
如果服務(wù)未安裝,則需要手動(dòng)安裝
#:yum install - y at 或 #:apt-get install at
如果擔(dān)心啟動(dòng)是否執(zhí)行OK的話,可使用命令查看:
#:ps aux |grep atd
或者使用
systemctl status atd
# 查閱一下 atd 目前的狀態(tài),Active 狀態(tài)應(yīng)是 running
使用 at 這個(gè)指令來(lái)產(chǎn)生所要運(yùn)行的工作,并 將這個(gè)工作以文本文件的方式寫(xiě)入 /var/spool/cron/atjobs/ 目錄內(nèi),該工作便能等待 atd 這個(gè)服務(wù)的取用與執(zhí)行了。 不過(guò),因?yàn)榘踩睦碛桑⒉皇撬械娜硕伎梢赃M(jìn)行 at 工作調(diào)度!
at 的使用限制是利用 /etc/at.allow 與 /etc/at.deny 這兩個(gè)文件來(lái)進(jìn)行的! 加上這兩個(gè)文件后,at 的工作情況其實(shí)是這樣的:
在一般的 distributions 當(dāng)中,由于假設(shè)系統(tǒng)上的所有用戶都是可信任的,因此系統(tǒng)通常會(huì)保留一個(gè)空的 /etc/at.deny 文件,意思是允 許所有人使用 at 指令的意思 (您可以自行檢查一下該文件)。 不過(guò),萬(wàn)一你不希望有某些 使用者使用 at 的話,將那個(gè)使用者的帳號(hào)寫(xiě)入 /etc/at.deny 即可! 一個(gè)帳號(hào)寫(xiě)一行。
單一工作調(diào)度的進(jìn)行就使用 at 這個(gè)指令!這個(gè)指令的運(yùn)行非常簡(jiǎn)單!將 at 加上一個(gè)時(shí)間即可!基本的語(yǔ)法如下:
事實(shí)上,當(dāng)我們使用 at 時(shí)會(huì)進(jìn)入一個(gè) at shell 的環(huán)境來(lái)讓使用者下達(dá)工作指令,此時(shí),建議 你最好使用絕對(duì)路徑來(lái)下達(dá)你的指令,比較不會(huì)有問(wèn)題!由于指令的下達(dá)與 PATH 變量有關(guān), 同時(shí)與當(dāng)時(shí)的工作目錄也有關(guān)連 (如果有牽涉到文件的話),因此使用絕對(duì)路徑來(lái)下達(dá) 指令,會(huì)是比較一勞永逸的方法。 舉例來(lái)說(shuō),你在 /tmp 下達(dá) at now 然后輸入 mail -s "test" root .bashrc , 問(wèn)一下,那個(gè) .bashrc 的文件會(huì)是在哪里?答案是 /tmp/.bashrc !因?yàn)?at 在運(yùn)行時(shí),會(huì)跑到當(dāng)時(shí)下達(dá) at 指令的那個(gè)工作目錄運(yùn)行!
要注意的是,如果在 at shell 內(nèi)的指令并沒(méi)有任何的訊息輸出,那么 at 默認(rèn)不會(huì)發(fā) email 給執(zhí)行者的。 如果你想要讓 at 無(wú)論如何都發(fā)一封 email 告知你是否執(zhí)行了指令,那么 可以使用“ at -m 時(shí)間格式 ”來(lái)下達(dá)指令! at 就會(huì)傳送一個(gè)訊息給執(zhí)行者,而不論該指令執(zhí)行有無(wú)訊息輸出了!
如果要在某某時(shí)刻,在我的終端機(jī)顯示出 Hello 的字樣,可以通過(guò)終端機(jī)的設(shè)備來(lái)處理!假如你在 tty1 登陸(在命令行里面輸入 tty 可以查看),則可以使用 echo "Hello" /dev/tty1 。
at 有另外一個(gè)很棒的優(yōu)點(diǎn), 由于 at 工作調(diào)度的使用上,系統(tǒng)會(huì)將該項(xiàng) at 工作獨(dú)立出你的 bash 環(huán)境中, 直接交給系統(tǒng)的 atd 程序來(lái)接管,因此,當(dāng)你下達(dá)了 at 的工作之后就可以立刻離線了, 剩下的工作就完全交 給 Linux 管理即可!所以如果有長(zhǎng)時(shí)間的網(wǎng)絡(luò)工作時(shí),使用 at 可以讓你免除網(wǎng)絡(luò)斷線后的困擾。
其實(shí) batch 是利用 at 來(lái)進(jìn)行指令的下達(dá)!只是加入一些控制參數(shù)而已。這個(gè) batch 神奇的地方在于:他會(huì)在 CPU 的工作負(fù)載小于 0.8 的時(shí)候,才進(jìn)行你所下達(dá)的工作任務(wù)啦!
那什么是工作負(fù)載 0.8 呢?這個(gè)工作負(fù)載的意思是: CPU 在單一時(shí)間點(diǎn)所負(fù)責(zé)的工作數(shù)量。不是CPU 的使用率喔! 舉例來(lái)說(shuō),如果我有一只程序他需要一直使用 CPU 的運(yùn)算功能,那么此 時(shí) CPU 的使用率可能到達(dá) 100% , 但是 CPU 的工作負(fù)載則是趨近于“ 1 ”,因?yàn)?CPU 僅負(fù)責(zé)一個(gè)工作!如果同時(shí)執(zhí)行這樣的程序兩支呢? CPU 的使用率還是 100% ,但是工作負(fù)載 則變成 2 了! 所以也就是說(shuō),當(dāng) CPU 的工作負(fù)載越大,代表 CPU 必須要在不同的工作之間進(jìn)行頻繁的工 作切換。 因?yàn)橐恢鼻袚Q 工作,所以會(huì)導(dǎo)致系統(tǒng)忙碌?。?系統(tǒng)如果很忙碌,還要額外進(jìn)行 at ,不太合理!所以才有 batch 指令的產(chǎn)生!
下面來(lái)實(shí)驗(yàn)一下 batch 好了!為了產(chǎn)生 CPU 較高的工作負(fù)載,我們用了 計(jì)算 pi 的腳本,連續(xù)執(zhí)行 4 次這只程序, 來(lái)仿真高負(fù)載,然后看看batch 的工作現(xiàn)象。
使用 uptime 可以觀察到 1, 5, 15 分鐘的“平均工作負(fù)載”量,因?yàn)槭瞧骄?,所以?dāng)我們?nèi)缟?表刪除掉四個(gè)工作后,工作負(fù)載不會(huì)立即降低, 需要一小段時(shí)間讓這個(gè) 1 分鐘平均值慢慢回 復(fù)到接近 0 ?。‘?dāng)小于 0.8 之后的“整分鐘時(shí)間”時(shí),atd 就會(huì)將 batch 的工作執(zhí)行掉了!
什么是“整分鐘時(shí)間”呢?不論是 at 還是 crontab,他們最小的時(shí)間單位是“分 鐘”,所以,基本上,他們的工作是“每分鐘檢查一次”來(lái)處理的! 就是整分 (秒為 0 的時(shí)候),同時(shí),你會(huì)發(fā)現(xiàn)其實(shí) batch 也是使用 atq/atrm 來(lái)管理的!
簡(jiǎn)介
at定時(shí)任務(wù),指定一個(gè)時(shí)間執(zhí)行一個(gè)任務(wù),只能執(zhí)行一次。需要安裝at服務(wù),apt-get install at;
創(chuàng)建at任務(wù)
創(chuàng)建at任務(wù)方式有兩種,從文件輸入和從控制臺(tái)輸入。以下分別用兩種方式創(chuàng)建1分鐘后將當(dāng)前時(shí)間寫(xiě)入 home/result 文件的命令
1、從文件輸入
2、從命令行輸入
注意此處的是ctrl+d 按鍵。
atq 和 atrm命令
atq查看at定時(shí)隊(duì)列命令,atrm刪除某個(gè)定時(shí)任務(wù)命令.
附錄
1、at時(shí)間定義
at允許使用一套相當(dāng)復(fù)雜的指定時(shí)間的方法。?
1)能夠接受在當(dāng)天的hh:mm(小時(shí):分鐘)式的時(shí)間指定。假如該時(shí)間已過(guò)去,那么就放在第二天執(zhí)行。?例如:04:00?
2)能夠使用midnight(深夜),noon(中午),teatime(飲茶時(shí)間,一般是下午4點(diǎn))等比較模糊的詞語(yǔ)來(lái)指定時(shí)間。?
3)能夠采用12小時(shí)計(jì)時(shí)制,即在時(shí)間后面加上AM(上午)或PM(下午)來(lái)說(shuō)明是上午還是下午。?例如:12pm?
4)能夠指定命令執(zhí)行的具體日期,指定格式為month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必須跟在指定時(shí)間的后面。?例如:04:00 2009-03-1?
5)能夠使用相對(duì)計(jì)時(shí)法。指定格式為:now + count time-units ,now就是當(dāng)前時(shí)間,time-units是時(shí)間單位,這里能夠是minutes(分鐘)、hours(小時(shí))、days(天)、weeks(星期)。count是時(shí)間的數(shù)量,幾天,幾小時(shí)。?例如:now + 5 minutes 04pm + 3 days?
6)能夠直接使用today(今天)、tomorrow(明天)來(lái)指定完成命令的時(shí)間。