如何在特定的時間運行一個命令at命令能在您所指定的時間運行您選擇的命令 例如 如果我想在上午 點鐘播放CDROM中的樂曲 則鍵入如下命令 $ at : at cdplay 在上面的例子中 我先鍵入at : 然后鍵入回車 隨后出現(xiàn)at命令提示符at 在這個提示符下 又鍵入命令cdplay 然后用 結束輸入 如果沒有鍵入 而輸入回車 則at會在下一行出現(xiàn) 這樣就可以鍵入另一條要在 : 執(zhí)行的命令 依次類推 您可以安排從 : 開始執(zhí)行的一系列命令 在命令輸完后 用 結束輸入 相當于向當前輸入發(fā)出了一個 文件尾 信號 因此 如果您連續(xù)按兩次 的話 您就會從系統(tǒng)中注銷 下面的命令將列出所有待執(zhí)行的作業(yè) 該命令會按照序號顯示當前全部作業(yè) $ at l如果要刪除隊列中的某個作業(yè) 使用如下命令 它將刪除隊列中序號為 的作業(yè) $ at rm 下面的命令將在新的千年開始前五分鐘啟動X Window系統(tǒng) $ at : / / at startx如果一般用戶無法使用at命令的話 請檢查一下文件/etc/at deny和/etc/at allow 在默認配置中 系統(tǒng)允許所有的用戶使用at命令 如果您只想讓某些用戶使用at命令 就需要創(chuàng)建文件/etc/at allow 并將可以使用at命令的用戶列在文件中 對于at的其它可選項 請參見man at 如何設置cron我們在紅旗Linux系統(tǒng)中默認安裝了cron 它是一個Linux進程 主要用來在夜晚運行某些后臺作業(yè) 所以您一般不需要對它做任何改動 除非您想在其中增加某些作業(yè)或修改cron運行作業(yè)的時間 cron的某些作業(yè)對系統(tǒng)而言是基礎 用來保證系統(tǒng)能夠長時間正常工作 cron的工作主要包括 重建文件位置的數據庫 這樣您才能用 locate 命令查找清空/tmp目錄重建用戶手冊進行某些檢查設置 例如增加新字體我們在每天下班時不應該關閉Linux 否則cron就無法完成它的工作 如果您確實要將計算機在夜晚關閉 就應該調整cron 讓它在其它時間完成必需的工作 查看/etc/crontab文件可以了解cron作業(yè)什么時候被喚醒 $ cat /etc/crontab一個可能的示例文件如下 # run parts * * * * root run parts /etc/cron hourly * * * root run parts /etc/cron daily * * root run parts /etc/cron weekly * * root run parts /etc/cron monthly 其中包括了四類作業(yè) 每小時執(zhí)行一次的 每天執(zhí)行一次的 每周執(zhí)行一次的和每月執(zhí)行一次的 您也可以修改該文件 以增加您自己的cron類別 文件中每一項的含義如下 分鐘( ) 小時( ) 一月中第幾天( ) 月份數( ) 星期幾( 或星期天至星期六) 其中 * 表示任何有效數字 因此 每小時完成的作業(yè)記錄在目錄/etc/cron hourly中 這些作業(yè)每個小時的第 分鐘將被執(zhí)行 每天完成的作業(yè)記錄在目錄/etc/cron daily中 這些作業(yè)每天 點過 分執(zhí)行 每周執(zhí)行的作業(yè)在星期六的上午 點 分執(zhí)行 每月執(zhí)行的作業(yè)在每月 日上午 點 分執(zhí)行 每一項的最后一列指明了當時間到了以后 要運行的命令文件的完整路徑名 如果您想把早晨 點 分執(zhí)行的cron作業(yè)在中午進行 把 修改為 即可 cron在每分鐘都會被喚醒一次 并檢查/etc/crontab是否改變 所以對cron的修改是可以立即生效的 如果您想在cron中增加自己的作業(yè) 請將您要運行的命令的腳本文件或指向腳本的鏈接文件拷貝到目錄/etc/cron hourly或cron daily或cron weekly或cron monthly下 lishixinzhi/Article/program/Oracle/201311/18426
成都創(chuàng)新互聯(lián)長期為成百上千客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為魯山企業(yè)提供專業(yè)的網站制作、成都做網站,魯山網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發(fā)。
與crond不同的是,at任務調度是一次性的,而crond是重復性的
1.1 at命令是一次性定時計劃任務,at的守護進程atd會以后臺模式運行,檢查作業(yè)隊列來運行
1.2 默認情況下,atd守護進程每60s檢查作業(yè)隊列,有作業(yè)時,會檢查作業(yè)運行時間,如果時間與當前時間匹配,則運行此作業(yè)
1.3 at命令是一次性定時計劃任務,執(zhí)行完一個任務后就不再執(zhí)行這個任務了
1.4 在使用at命令的時候,一定要保證atd進程的啟動,可以使用相關指令查看
ps -ef | grep atd 可以檢查atd是否在運行
at [選項] [時間]
按兩次 ctrl+d 結束at命令的輸入
4.1 當天的hh:mm(小時:分鐘),假如這個時間已經過去,那么就第二天的這個時間執(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是時間的數量,例如: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輸出時間到指定文件內 /root/date100.log
at 17:00 tomorrow 按回車鍵
date /root/date100.log
按兩次ctrl+d退出at指令的輸入
5.4 2分鐘后
at now + 2 minutes
5.5 刪除已經設置的任務,atrm 編號
可以用atq列出待執(zhí)行的任務,列出后第一列就是job編號
linux
at
命令詳解
使用方式
:
at
-V
[-q
queue]
[-f
file]
[-mldbv]
TIME
說明
:
at
可以讓使用者指定在
TIME
這個特定時刻執(zhí)行某個程序或指令,TIME
的格式是
HH:MM其中的
HH
為小時,MM
為分鐘,甚至你也可以指定
am,
pm,
midnight,
noon,
teatime(就是下午
4
點鍾)等口語詞。
如果想要指定超過一天內的時間,則可以用
MMDDYY
或者
MM/DD/YY
的格式,其中
MM
是分鐘,DD
是第幾日,YY
是指年份。另外,使用者甚至也可以使用像是
now
+
時間間隔來彈性指定時間,其中的時間間隔可以是
minutes,
hours,
days,
weeks。
另外,使用者也可指定
today
或
tomorrow
來表示今天或明天。當指定了時間并按下
enter
之后,at
會進入交談模式并要求輸入指令或程序,當你輸入完后按下
ctrl+D
即可完成所有動作,至于執(zhí)行的結果將會寄回你的帳號中。
參數
:
-V
:
印出版本編號
-q
:
使用指定的佇列(Queue)來儲存,at
的資料是存放在所謂的
queue
中,使用者可以同時使用多個
queue,而
queue
的編號為
a,
b,
c...
z
以及
A,
B,
...
Z
共
52
個
-m
:
即使程序/指令執(zhí)行完成后沒有輸出結果,
也要寄封信給使用者
-f
file
:
讀入預先寫好的命令檔。使用者不一定要使用交談模式來輸入,可以先將所有的指定先寫入檔案后再一次讀入
-l
:
列出所有的指定
(使用者也可以直接使用
atq
而不用
at
-l)
-d
:
刪除指定
(使用者也可以直接使用
atrm
而不用
at
-d)
-v
:
列出所有已經完成但尚未刪除的指定
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 這個指令來產生所要運行的工作,并 將這個工作以文本文件的方式寫入 /var/spool/cron/atjobs/ 目錄內,該工作便能等待 atd 這個服務的取用與執(zhí)行了。 不過,因為安全的理由,并不是所有的人都可以進行 at 工作調度!
at 的使用限制是利用 /etc/at.allow 與 /etc/at.deny 這兩個文件來進行的! 加上這兩個文件后,at 的工作情況其實是這樣的:
在一般的 distributions 當中,由于假設系統(tǒng)上的所有用戶都是可信任的,因此系統(tǒng)通常會保留一個空的 /etc/at.deny 文件,意思是允 許所有人使用 at 指令的意思 (您可以自行檢查一下該文件)。 不過,萬一你不希望有某些 使用者使用 at 的話,將那個使用者的帳號寫入 /etc/at.deny 即可! 一個帳號寫一行。
單一工作調度的進行就使用 at 這個指令!這個指令的運行非常簡單!將 at 加上一個時間即可!基本的語法如下:
事實上,當我們使用 at 時會進入一個 at shell 的環(huán)境來讓使用者下達工作指令,此時,建議 你最好使用絕對路徑來下達你的指令,比較不會有問題!由于指令的下達與 PATH 變量有關, 同時與當時的工作目錄也有關連 (如果有牽涉到文件的話),因此使用絕對路徑來下達 指令,會是比較一勞永逸的方法。 舉例來說,你在 /tmp 下達 at now 然后輸入 mail -s "test" root .bashrc , 問一下,那個 .bashrc 的文件會是在哪里?答案是 /tmp/.bashrc !因為 at 在運行時,會跑到當時下達 at 指令的那個工作目錄運行!
要注意的是,如果在 at shell 內的指令并沒有任何的訊息輸出,那么 at 默認不會發(fā) email 給執(zhí)行者的。 如果你想要讓 at 無論如何都發(fā)一封 email 告知你是否執(zhí)行了指令,那么 可以使用“ at -m 時間格式 ”來下達指令! at 就會傳送一個訊息給執(zhí)行者,而不論該指令執(zhí)行有無訊息輸出了!
如果要在某某時刻,在我的終端機顯示出 Hello 的字樣,可以通過終端機的設備來處理!假如你在 tty1 登陸(在命令行里面輸入 tty 可以查看),則可以使用 echo "Hello" /dev/tty1 。
at 有另外一個很棒的優(yōu)點, 由于 at 工作調度的使用上,系統(tǒng)會將該項 at 工作獨立出你的 bash 環(huán)境中, 直接交給系統(tǒng)的 atd 程序來接管,因此,當你下達了 at 的工作之后就可以立刻離線了, 剩下的工作就完全交 給 Linux 管理即可!所以如果有長時間的網絡工作時,使用 at 可以讓你免除網絡斷線后的困擾。
其實 batch 是利用 at 來進行指令的下達!只是加入一些控制參數而已。這個 batch 神奇的地方在于:他會在 CPU 的工作負載小于 0.8 的時候,才進行你所下達的工作任務啦!
那什么是工作負載 0.8 呢?這個工作負載的意思是: CPU 在單一時間點所負責的工作數量。不是CPU 的使用率喔! 舉例來說,如果我有一只程序他需要一直使用 CPU 的運算功能,那么此 時 CPU 的使用率可能到達 100% , 但是 CPU 的工作負載則是趨近于“ 1 ”,因為 CPU 僅負責一個工作!如果同時執(zhí)行這樣的程序兩支呢? CPU 的使用率還是 100% ,但是工作負載 則變成 2 了! 所以也就是說,當 CPU 的工作負載越大,代表 CPU 必須要在不同的工作之間進行頻繁的工 作切換。 因為一直切換 工作,所以會導致系統(tǒng)忙碌??! 系統(tǒng)如果很忙碌,還要額外進行 at ,不太合理!所以才有 batch 指令的產生!
下面來實驗一下 batch 好了!為了產生 CPU 較高的工作負載,我們用了 計算 pi 的腳本,連續(xù)執(zhí)行 4 次這只程序, 來仿真高負載,然后看看batch 的工作現(xiàn)象。
使用 uptime 可以觀察到 1, 5, 15 分鐘的“平均工作負載”量,因為是平均值,所以當我們如上 表刪除掉四個工作后,工作負載不會立即降低, 需要一小段時間讓這個 1 分鐘平均值慢慢回 復到接近 0 ??!當小于 0.8 之后的“整分鐘時間”時,atd 就會將 batch 的工作執(zhí)行掉了!
什么是“整分鐘時間”呢?不論是 at 還是 crontab,他們最小的時間單位是“分 鐘”,所以,基本上,他們的工作是“每分鐘檢查一次”來處理的! 就是整分 (秒為 0 的時候),同時,你會發(fā)現(xiàn)其實 batch 也是使用 atq/atrm 來管理的!