包含linux用at命令的詞條

19. Linux的at定時(shí)任務(wù)調(diào)度

與crond不同的是,at任務(wù)調(diào)度是一次性的,而crond是重復(fù)性的

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、青龍ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的青龍網(wǎng)站制作公司

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)

linux命令詳解之a(chǎn)t

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的話(huà),可使用命令查看:

#: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)榘踩睦碛?,并不是所有的人都可以進(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)上的所有用戶(hù)都是可信任的,因此系統(tǒng)通常會(huì)保留一個(gè)空的 /etc/at.deny 文件,意思是允 許所有人使用 at 指令的意思 (您可以自行檢查一下該文件)。 不過(guò),萬(wàn)一你不希望有某些 使用者使用 at 的話(huà),將那個(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)連 (如果有牽涉到文件的話(huà)),因此使用絕對(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)管理的!

linux中at的執(zhí)行結(jié)果放在哪里

之前說(shuō)了使用crontab實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù),假如我們只是想要讓特定任務(wù)運(yùn)行一次,那么,這時(shí)候就要用到at監(jiān)控程序了。

一、at服務(wù)

cron是一個(gè)linux下 的定時(shí)執(zhí)行工具,可以在無(wú)需人工干預(yù)的情況下運(yùn)行作業(yè)。

service atd start? ? //啟動(dòng)服務(wù)

service atd ?stop? ???//關(guān)閉服務(wù)

service atd restart??//重啟服務(wù)

service atd reload? ?//重新載入配置

service atd status? ?//查看服務(wù)狀態(tài)?

二、at在配置文件:

at類(lèi)似打印進(jìn)程,會(huì)把任務(wù)放到/var/spool/at目錄中,到指定時(shí)間運(yùn)行它 。at命令相當(dāng)于另一個(gè)shell,運(yùn)行at time命令時(shí),它發(fā)送一個(gè)個(gè)命令,可以輸入任意命令或者程序。

三、參數(shù)詳解

at [-V] [-q x] [-f file] [-mldbv] time

at -c job ...

atq [-V] [-q x]

atrm [-V] job ...

-V : 印出版本編號(hào)?

-q : 使用指定的佇列(Queue)來(lái)儲(chǔ)存,at 的資料是存放在所謂的 queue 中,使用者可以同時(shí)使用多個(gè) queue,而 queue 的編號(hào)為 a, b, c... z 以及 A, B, ... Z 共 52 個(gè)?

-m : 即使程序/指令執(zhí)行完成后沒(méi)有輸出結(jié)果, 也要寄封信給使用者?

-f file : 讀入預(yù)先寫(xiě)好的命令檔。使用者不一定要使用交談模式來(lái)輸入,可以先將所有的指定先寫(xiě)入檔案后再一次讀入?網(wǎng)絡(luò)應(yīng)用

-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)?

-d : 刪除指定 (使用者也可以直接使用 atrm 而不用 at -d)?

-v : 列出所有已經(jīng)完成但尚未刪除的指定?

at命令執(zhí)行流程

# at 2:05 tomorrow

at/home/kyle/do_job

at Ctrl+D

AT Time中的時(shí)間表示方法

-----------------------------------------------------------------------

時(shí) 間 例子 說(shuō)明

-----------------------------------------------------------------------

Minute? ? at now + 5 minutes? ?任務(wù)在5分鐘后運(yùn)行

Hour? ?? ?at now + 1 hour? ?? ?任務(wù)在1小時(shí)后運(yùn)行

Days? ?? ?at now + 3 days? ?? ?任務(wù)在3天后運(yùn)行

Weeks? ???at now + 2 weeks? ???任務(wù)在兩周后運(yùn)行

Fixed? ???at midnight? ?? ?? ? 任務(wù)在午夜運(yùn)行

Fixed? ???at 10:30pm? ?? ?? ???任務(wù)在晚上10點(diǎn)30分

Fixed ? ? at?23:59 12/31/2018?任務(wù)在2018年12月31號(hào)23點(diǎn)59分

分享名稱(chēng):包含linux用at命令的詞條
網(wǎng)站鏈接:http://bm7419.com/article14/ddehcde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、響應(yīng)式網(wǎng)站定制開(kāi)發(fā)、ChatGPT品牌網(wǎng)站建設(shè)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)