linux里面atd命令的簡單介紹

linux atd的坑

一般linux系統(tǒng)中定時周期性任務的執(zhí)行我們都是用crontab去實現(xiàn),而執(zhí)行延時任務的話比較少人會用到atd服務。之前項目中有需要用到執(zhí)行延時任務的場景,因為偷懶,懶得自己寫工具去實現(xiàn),就使用了atd服務的at命令創(chuàng)建一個延時任務,結(jié)果延時任務竟然沒執(zhí)行。剛好團隊內(nèi)部要分享,覺得這個問題還是有一定價值,先記錄下吧。

公司專注于為企業(yè)提供成都網(wǎng)站設計、成都網(wǎng)站制作、微信公眾號開發(fā)、電子商務商城網(wǎng)站建設微信小程序開發(fā),軟件按需開發(fā)網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務。憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務。

(注:atd服務centos7中minimal版是沒有自帶的,需要yum進行安裝,安裝完畢可以執(zhí)行at命令進行任務下發(fā),兩種方式:1、echo "command" | at now + 時間間隔的形式;2、at命令交互shell的方式)

出現(xiàn)問題的時候查看/var/log/messages等系統(tǒng)日志并沒看出什么有效信息,網(wǎng)絡上也幾乎沒找到相關(guān)的信息。最終,在嘗試復現(xiàn)時,發(fā)現(xiàn)了問題所在,linux系統(tǒng)提示“You have mail in /var/spool/mail/root”,tail -f一查看就基本明確了,下面是通過在/root/attest目錄下創(chuàng)建echo "echo 10 /root/task.txt | at now + 2 minute"任務后,刪除attest目錄后復現(xiàn)出的現(xiàn)象,日志中提示如下:

郵件提示是運行時的路徑找不到了,原來是通過at下發(fā)的任務在運行時還依賴執(zhí)行下發(fā)動作時的工作目錄,如果你在下發(fā)完任務后,把當時的路徑給刪掉了,那這個任務就GG了。其實可以在下發(fā)完任務后通過atq獲取到任務編號,并通過at -c 加任務編號查看任務信息,任務信息中有記錄運行任務所需的工作路徑。

請忽略上圖中任務id不一致的情況,上圖僅僅是為了說明問題。

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

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

1.1 at命令是一次性定時計劃任務,at的守護進程atd會以后臺模式運行,檢查作業(yè)隊列來運行

1.2 默認情況下,atd守護進程每60s檢查作業(yè)隊列,有作業(yè)時,會檢查作業(yè)運行時間,如果時間與當前時間匹配,則運行此作業(yè)

1.3 at命令是一次性定時計劃任務,執(zhí)行完一個任務后就不再執(zhí)行這個任務了

1.4 在使用at命令的時候,一定要保證atd進程的啟動,可以使用相關(guān)指令查看

ps -ef | grep atd 可以檢查atd是否在運行

at [選項] [時間]

按兩次 ctrl+d 結(jié)束at命令的輸入

4.1 當天的hh:mm(小時:分鐘),假如這個時間已經(jīng)過去,那么就第二天的這個時間執(zhí)行。例如04:00

4.2 模糊的詞語,例如midnight、noon、teatime(下午茶時間,16:00左右)

4.3 采用12小時計時制,例如8am

4.4 指定執(zhí)行命令的具體日期,格式為month dat(月 日)或者mm/dd/yy或者dd.mm.yy,指定的日期必須跟著寫在在指定時間的后面,例如:04:00 2021-3-1就是2021年3月1日凌晨4點整執(zhí)行

4.5 相對計時法,指定格式為now + count time-units,now就是當前時間,time-units是時間單位,可以是minutes、hours、days、weeks。count是時間的數(shù)量,例如:now + 5 minutes

4.6 直接用today、tomorrow來指定完成命令的時間

5.1 2天后的下午5點,執(zhí)行/bin/ls /home指令

at 5pm + 2 days 按回車鍵

然后寫下那個時刻要執(zhí)行命令 /bin/ls /home

最后按兩次ctrl+d退出at指令

5.2 atq指令可以直接執(zhí)行,查看系統(tǒng)中待執(zhí)行的工作任務

5.3 明天17:00輸出時間到指定文件內(nèi) /root/date100.log

at 17:00 tomorrow 按回車鍵

date /root/date100.log

按兩次ctrl+d退出at指令的輸入

5.4 2分鐘后

at now + 2 minutes

5.5 刪除已經(jīng)設置的任務,atrm 編號

可以用atq列出待執(zhí)行的任務,列出后第一列就是job編號

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

Linux下,有兩個命令可以用來作為計劃任務而執(zhí)行,

要使用一次性任務計劃,linux必須要有負責這個計劃任務的服務,那就是atd服務

但是并非所有的linux distribution都默認會打開,我們需要手動激活愛聽的任務

如果服務未安裝,則需要手動安裝

#:yum install - y at 或 #:apt-get install at

如果擔心啟動是否執(zhí)行OK的話,可使用命令查看:

#:ps aux |grep atd

或者使用

systemctl status atd

# 查閱一下 atd 目前的狀態(tài),Active 狀態(tài)應是 running

使用 at 這個指令來產(chǎn)生所要運行的工作,并 將這個工作以文本文件的方式寫入 /var/spool/cron/atjobs/ 目錄內(nèi),該工作便能等待 atd 這個服務的取用與執(zhí)行了。 不過,因為安全的理由,并不是所有的人都可以進行 at 工作調(diào)度!

at 的使用限制是利用 /etc/at.allow 與 /etc/at.deny 這兩個文件來進行的! 加上這兩個文件后,at 的工作情況其實是這樣的:

在一般的 distributions 當中,由于假設系統(tǒng)上的所有用戶都是可信任的,因此系統(tǒng)通常會保留一個空的 /etc/at.deny 文件,意思是允 許所有人使用 at 指令的意思 (您可以自行檢查一下該文件)。 不過,萬一你不希望有某些 使用者使用 at 的話,將那個使用者的帳號寫入 /etc/at.deny 即可! 一個帳號寫一行。

單一工作調(diào)度的進行就使用 at 這個指令!這個指令的運行非常簡單!將 at 加上一個時間即可!基本的語法如下:

事實上,當我們使用 at 時會進入一個 at shell 的環(huán)境來讓使用者下達工作指令,此時,建議 你最好使用絕對路徑來下達你的指令,比較不會有問題!由于指令的下達與 PATH 變量有關(guān), 同時與當時的工作目錄也有關(guān)連 (如果有牽涉到文件的話),因此使用絕對路徑來下達 指令,會是比較一勞永逸的方法。 舉例來說,你在 /tmp 下達 at now 然后輸入 mail -s "test" root .bashrc , 問一下,那個 .bashrc 的文件會是在哪里?答案是 /tmp/.bashrc !因為 at 在運行時,會跑到當時下達 at 指令的那個工作目錄運行!

要注意的是,如果在 at shell 內(nèi)的指令并沒有任何的訊息輸出,那么 at 默認不會發(fā) email 給執(zhí)行者的。 如果你想要讓 at 無論如何都發(fā)一封 email 告知你是否執(zhí)行了指令,那么 可以使用“ at -m 時間格式 ”來下達指令! at 就會傳送一個訊息給執(zhí)行者,而不論該指令執(zhí)行有無訊息輸出了!

如果要在某某時刻,在我的終端機顯示出 Hello 的字樣,可以通過終端機的設備來處理!假如你在 tty1 登陸(在命令行里面輸入 tty 可以查看),則可以使用 echo "Hello" /dev/tty1 。

at 有另外一個很棒的優(yōu)點, 由于 at 工作調(diào)度的使用上,系統(tǒng)會將該項 at 工作獨立出你的 bash 環(huán)境中, 直接交給系統(tǒng)的 atd 程序來接管,因此,當你下達了 at 的工作之后就可以立刻離線了, 剩下的工作就完全交 給 Linux 管理即可!所以如果有長時間的網(wǎng)絡工作時,使用 at 可以讓你免除網(wǎng)絡斷線后的困擾。

其實 batch 是利用 at 來進行指令的下達!只是加入一些控制參數(shù)而已。這個 batch 神奇的地方在于:他會在 CPU 的工作負載小于 0.8 的時候,才進行你所下達的工作任務啦!

那什么是工作負載 0.8 呢?這個工作負載的意思是: CPU 在單一時間點所負責的工作數(shù)量。不是CPU 的使用率喔! 舉例來說,如果我有一只程序他需要一直使用 CPU 的運算功能,那么此 時 CPU 的使用率可能到達 100% , 但是 CPU 的工作負載則是趨近于“ 1 ”,因為 CPU 僅負責一個工作!如果同時執(zhí)行這樣的程序兩支呢? CPU 的使用率還是 100% ,但是工作負載 則變成 2 了! 所以也就是說,當 CPU 的工作負載越大,代表 CPU 必須要在不同的工作之間進行頻繁的工 作切換。 因為一直切換 工作,所以會導致系統(tǒng)忙碌啊! 系統(tǒng)如果很忙碌,還要額外進行 at ,不太合理!所以才有 batch 指令的產(chǎn)生!

下面來實驗一下 batch 好了!為了產(chǎn)生 CPU 較高的工作負載,我們用了 計算 pi 的腳本,連續(xù)執(zhí)行 4 次這只程序, 來仿真高負載,然后看看batch 的工作現(xiàn)象。

使用 uptime 可以觀察到 1, 5, 15 分鐘的“平均工作負載”量,因為是平均值,所以當我們?nèi)缟?表刪除掉四個工作后,工作負載不會立即降低, 需要一小段時間讓這個 1 分鐘平均值慢慢回 復到接近 0 啊!當小于 0.8 之后的“整分鐘時間”時,atd 就會將 batch 的工作執(zhí)行掉了!

什么是“整分鐘時間”呢?不論是 at 還是 crontab,他們最小的時間單位是“分 鐘”,所以,基本上,他們的工作是“每分鐘檢查一次”來處理的! 就是整分 (秒為 0 的時候),同時,你會發(fā)現(xiàn)其實 batch 也是使用 atq/atrm 來管理的!

本文名稱:linux里面atd命令的簡單介紹
文章分享:http://m.kartarina.com/article40/hsojho.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣云服務器網(wǎng)站制作品牌網(wǎng)站制作營銷型網(wǎng)站建設微信公眾號

廣告

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

網(wǎng)站托管運營
主站蜘蛛池模板: 亚洲精品久久久久无码AV片软件| 亚洲精品无码成人| 免费无码看av的网站| 免费无码又爽又高潮视频| 免费A级毛片无码A∨男男| 无码性午夜视频在线观看| 免费无码午夜福利片| AV无码免费永久在线观看| 亚洲成a人片在线观看无码专区| 狠狠爱无码一区二区三区| 亚洲精品无码鲁网中文电影| 日韩人妻无码一区二区三区久久99 | 色情无码WWW视频无码区小黄鸭| 黄A无码片内射无码视频| 麻豆aⅴ精品无码一区二区| 亚洲午夜无码久久久久| 日韩av无码成人无码免费| 午夜无码熟熟妇丰满人妻| 无码aⅴ精品一区二区三区| 无码久久精品国产亚洲Av影片| 免费无码又爽又高潮视频 | 亚洲AV无码久久| 国产V片在线播放免费无码| 色欲aⅴ亚洲情无码AV| 亚洲最大中文字幕无码网站| 亚洲精品无码久久久影院相关影片| 久久久久久久久免费看无码| 日韩AV无码精品人妻系列| 免费无码黄网站在线看| 精品无码三级在线观看视频| 国产成人无码精品久久久久免费| 亚洲国产精品无码第一区二区三区| 无码国产色欲XXXXX视频| 国产精品无码无卡在线播放| 红桃AV一区二区三区在线无码AV| 曰韩精品无码一区二区三区| 亚洲人成影院在线无码观看| 无码人妻久久久一区二区三区| 精品无人区无码乱码毛片国产 | 久久久久久久久无码精品亚洲日韩| 亚洲av日韩av无码|