當前位置:首頁 » 操作系統 » linux下at命令詳解

linux下at命令詳解

發布時間: 2023-09-22 19:17:41

linux命令詳解之at

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

要使用一次性任務計劃,linux必須要有負責這個計劃任務的服務,那就是atd服務
但是並非所有的linux distribution都默認會打開,我們需要手動激活愛聽的任務

如果服務未安裝,則需要手動安裝
#:yum install - y at 或 #:apt-get install at

如果擔心啟動是否執行OK的話,可使用命令查看:
#:ps aux |grep atd
或者使用
systemctl status atd
# 查閱一下 atd 目前的狀態,Active 狀態應是 running

使用 at 這個指令來產生所要運行的工作,並 將這個工作以文本文件的方式寫入 /var/spool/cron/atjobs/ 目錄內,該工作便能等待 atd 這個服務的取用與執行了。 不過,因為安全的理由,並不是所有的人都可以進行 at 工作調度!
at 的使用限制是利用 /etc/at.allow 與 /etc/at.deny 這兩個文件來進行的! 加上這兩個文件後,at 的工作情況其實是這樣的:

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

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

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

要注意的是,如果在 at shell 內的指令並沒有任何的訊息輸出,那麼 at 默認不會發 email 給執行者的。 如果你想要讓 at 無論如何都發一封 email 告知你是否執行了指令,那麼 可以使用「 at -m 時間格式 」來下達指令! at 就會傳送一個訊息給執行者,而不論該指令執行有無訊息輸出了!

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

at 有另外一個很棒的優點, 由於 at 工作調度的使用上,系統會將該項 at 工作獨立出你的 bash 環境中, 直接交給系統的 atd 程序來接管,因此,當你下達了 at 的工作之後就可以立刻離線了, 剩下的工作就完全交 給 Linux 管理即可!所以如果有長時間的網路工作時,使用 at 可以讓你免除網路斷線後的困擾。

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

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

下面來實驗一下 batch 好了!為了產生 CPU 較高的工作負載,我們用了 計算 pi 的腳本,連續執行 4 次這只程序, 來模擬高負載,然後看看batch 的工作現象。

使用 uptime 可以觀察到 1, 5, 15 分鍾的「平均工作負載」量,因為是平均值,所以當我們如上 表刪除掉四個工作後,工作負載不會立即降低, 需要一小段時間讓這個 1 分鍾平均值慢慢回 復到接近 0 啊!當小於 0.8 之後的「整分鍾時間」時,atd 就會將 batch 的工作執行掉了!
什麼是「整分鍾時間」呢?不論是 at 還是 crontab,他們最小的時間單位是「分 鍾」,所以,基本上,他們的工作是「每分鍾檢查一次」來處理的! 就是整分 (秒為 0 的時候),同時,你會發現其實 batch 也是使用 atq/atrm 來管理的!

❷ linux中at命令

linux
at
命令詳解
使用方式
:
at
-V
[-q
queue]
[-f
file]
[-mldbv]
TIME
說明
:
at
可以讓使用者指定在
TIME
這個特定時刻執行某個程序或指令,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
即可完成所有動作,至於執行的結果將會寄回你的帳號中。
參數
:
-V
:
印出版本編號
-q
:
使用指定的佇列(Queue)來儲存,at
的資料是存放在所謂的
queue
中,使用者可以同時使用多個
queue,而
queue
的編號為
a,
b,
c...
z
以及
A,
B,
...
Z

52

-m
:
即使程序/指令執行完成後沒有輸出結果,
也要寄封信給使用者
-f
file
:
讀入預先寫好的命令檔。使用者不一定要使用交談模式來輸入,可以先將所有的指定先寫入檔案後再一次讀入
-l
:
列出所有的指定
(使用者也可以直接使用
atq
而不用
at
-l)
-d
:
刪除指定
(使用者也可以直接使用
atrm
而不用
at
-d)
-v
:
列出所有已經完成但尚未刪除的指定

❸ Linux系統的進程調度

Linux進程調度

1.調度方式

Linux系統的調度方式基本上採用「 搶占式優先順序 」方式,當進程在用戶模式下運行時,不管它是否自願,核心在一定條件下(如該進程的時間片用完或等待I/O)可以暫時中止其運行,而調度其他進程運行。一旦進程切換到內核模式下運行時,就不受以上限制,而一直運行下去,僅在重新回到用戶模式之前才會發生進程調度。

Linux系統中的調度基本上繼承了UNIX系統的 以優先順序為基礎 的調度。也就是說,核心為系統中每個進程計算出一個優先順序,該優先順序反映了一個進程獲得CPU使用權的資格,即高優先順序的進程優先得到運行。核心從進程就緒隊列中挑選一個優先順序最高的進程,為其分配一個CPU時間片,令其投入運行。在運行過程中,當前進程的優先順序隨時間遞減,這樣就實現了「負反饋」作用,即經過一段時間之後,原來級別較低的進程就相對「提升」了級別,從而有機會得到運行。當所有進程的優先順序都變為0(最低)時,就重新計算一次所有進程的優先順序。

2.調度策略

Linux系統針對不同類別的進程提供了3種不同的調度策略,即SCHED_FIFO、SCHED_RR及SCHED_OTHER。其中,SCHED_FIFO適合於 短實時進程 ,它們對時間性要求比較強,而每次運行所需的時間比較短。一旦這種進程被調度且開始運行,就一直運行到自願讓出CPU或被優先順序更高的進程搶占其執行權為止。

SCHED_RR對應「時間片輪轉法」,適合於每次運行需要 較長時間的實時進程 。一個運行進程分配一個時間片(200 ms),當時間片用完後,CPU被另外進程搶占,而該進程被送回相同優先順序隊列的末尾,核心動態調整用戶態進程的優先順序。這樣,一個進程從創建到完成任務後終止,需要經歷多次反饋循環。當進程再次被調度運行時,它就從上次斷點處開始繼續執行。

SCHED_OTHER是傳統的UNIX調度策略,適合於互動式的 分時進程 。這類進程的優先順序取決於兩個因素:一個是進程剩餘時間配額,如果進程用完了配給的時間,則相應優先順序降到0;另一個是進程的優先數nice,這是從UNIX系統沿襲下來的方法,優先數越小,其優先順序越高。nice的取值范圍是-20 19。用戶可以利用nice命令設定進程的nice值。但一般用戶只能設定正值,從而主動降低其優先順序;只有特權用戶才能把nice的值設置為負數。進程的優先順序就是以上二者之和。

後台命令對應後台進程(又稱後台作業)。後台進程的優先順序低於任何交互(前台)進程的優先順序。所以,只有當系統中當前不存在可運行的交互進程時,才調度後台進程運行。後台進程往往按批處理方式調度運行。

3.調度時機

核心進行進程調度的時機有以下5種情況:

(1)當前進程調用系統調用nanosleep( )或者pause( ),使自己進入睡眠狀態,主動讓出一段時間的CPU的使用權。

(2)進程終止,永久地放棄對CPU的使用。

(3)在時鍾中斷處理程序執行過程中,發現當前進程連續運行的時間過長。

(4)當喚醒一個睡眠進程時,發現被喚醒的進程比當前進程更有資格運行。

(5)一個進程通過執行系統調用來改變調度策略或者降低自身的優先順序(如nice命令),從而引起立即調度。

4.調度演算法

進程調度的演算法應該比較簡單,以便減少頻繁調度時的系統開銷。Linux執行進程調度時,首先查找所有在就緒隊列中的進程,從中選出優先順序最高且在內存的一個進程。如果隊列中有實時進程,那麼實時進程將優先運行。如果最需要運行的進程不是當前進程,那麼當前進程就被掛起,並且保存它的現場—— 所涉及的一切機器狀態,包括程序計數器和CPU寄存器等,然後為選中的進程恢復運行現場。

(二)Linux常用調度命令

· nohup命令

nohup命令的功能是以忽略掛起和退出的方式執行指定的命令。其命令格式是:

nohupcommand[arguments]

其中,command是所要執行的命令,arguments是指定命令的參數。

nohup命令告訴系統,command所代表的命令在執行過程中不受任何結束運行的信號(hangup和quit)的影響。例如,

$ nohup find / -name exam.txt -print>f1 &

find命令在後台運行。在用戶注銷後,它會繼續運行:從根目錄開始,查找名字是exam.txt的文件,結果被定向到文件f1中。

如果用戶沒有對輸出進行重定向,則輸出被附加到當前目錄的nohup.out文件中。如果用戶在當前目錄中不具備寫許可權,則輸出被定向到$HOME/nohup.out 中。

· at命令

at命令允許指定命令執行的時間。at命令的常用形式是:

attimecommand

其中,time是指定命令command在將來執行時的時間和日期。時間的指定方法有多種,用戶可以使用絕對時間,也可以用相對時間。該指定命令將以作業形式在後台運行。例如:

$ at 15:00 Oct 20

回車後進入接收方式,接著鍵入以下命令:

mail -s "Happy Birthday!" liuzheny

按下D鍵,屏幕顯示:

job 862960800.a at Wed Oct 20 15:00:00 CST 1999

$

表明建立了一個作業,其作業ID號是862960800.a,運行作業的時間是1999年10月20日下午3:00,給liuzheny發一條標題為「Happy Birthday!」(生日快樂)的空白郵件。

利用 at-l 可以列出當前at隊列中所有的作業。

利用 at-r 可以刪除指定的作業。這些作業以前由at或batch命令調度。例如,

at-r862960797.a

將刪除作業ID號是862960797.a的作業。其一般使用形式是:

at-rjob_id

注意,結尾是.a的作業ID號,表示這個作業是由at命令提交的;結尾是.b的作業ID號,表示這個作業是由batch命令提交的。

· batch命令

batch命令不帶任何參數,它提交的作業的優先順序比at命令提交的作業的優先順序低。batch無法指定作業運行的時間。實際運行時間要看系統中已經提交的作業數量。如果系統中優先順序較高的作業比較多,那麼,batch提交的作業則需要等待;如果系統空閑,則運行batch提交的作業。例如,

$ batch

回車後進入接收方式,接著鍵入命令:

find / -name exam.txt -print

按下D。退出接收方式,屏幕顯示:

job 862961540.b at Thu Nov 18 14:30:00 CST 1999

表示find命令被batch作為一個作業提交給系統,作業ID號是862961540.b。如果系統當前空閑,這個作業被立即執行,其結果同樣作為郵件發送給用戶。

· jobs命令

jobs命令用來顯示當前shell下正在運行哪些作業(即後台作業)。例如:

$ jobs

[2] + Running tar tv3 *&

[1] - Running find / -name README -print > logfile &

$

其中,第一列方括弧中的數字表示作業序號,它是由當前運行的shell分配的,而不是由操作系統統一分配的。在當前shell環境下,第一個後台作業的作業號為1,第二個作業的作業號為2,等等。

第二列中的「 」號表示相應作業的優先順序比「-」號對應作業的優先順序高。

第三列表明作業狀態,是否為運行、中斷、等待輸入或停止等。

最後列出的是創建當前這個作業所對應的命令行。

利用 jobs-l 形式,可以在作業號後顯示出相應進程的PID。如果想只顯示相應進程的PID,不顯示其它信息,則使用 jobs-p 形式。

· fg命令

fg命令把指定的後台作業移到前台。其使用格式是:

fg [job…]

其中,參數job是一個或多個進程的PID,或者是命令名稱或者作業號(前面要帶有一個「%」號)。例如:

$ jobs

[2] + Running tar tv3 *&

[1] - Running find / -name README -print > logfile&

$ fg %find

find / -name README -print > logfile

注意,顯示的命令行末尾沒有「&」符號。下面命令能產生同樣的效果:

$ fg %1

這樣,find命令對應的進程就在前台執行。當後台只有一個作業時,鍵入不帶參數的fg命令,就能使相應進程移到前台。當有兩個或更多的後台作業時,鍵入不帶參數的fg,就把最後進入後台的進程首先移到前台。

· bg命令

bg命令可以把前台進程換到後台執行。其使用格式是:

bg [job…]

其中,job是一個或多個進程的PID、命令名稱或者作業號,在參數前要帶「%」號。例如,在cc(C編譯命令)命令執行過程中,按下Z鍵,使這個作業掛起。然後鍵入以下命令:

$ bg %cc

該掛起的作業在後台重新開始執行。

❹ Linux裡面atq命令作用是什麼

linux at 命令詳解 使用方式 : at -V [-q queue] [-f file] [-mldbv] TIME  說明 : a... #160; -l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)  -d :

❺ Linux怎樣在某一特定時間執行命令(使用at」

簡介

at定時任務,指定一個時間執行一個任務,只能執行一次。需要安裝at服務,apt-get install at;

創建at任務

創建at任務方式有兩種,從文件輸入和從控制台輸入。以下分別用兩種方式創建1分鍾後將當前時間寫入 home/result 文件的命令

1、從文件輸入

附錄

1、at時間定義

at允許使用一套相當復雜的指定時間的方法。
1)能夠接受在當天的hh:mm(小時:分鍾)式的時間指定。假如該時間已過去,那麼就放在第二天執行。例如:04:00
2)能夠使用midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午4點)等比較模糊的詞語來指定時間。
3)能夠採用12小時計時制,即在時間後面加上AM(上午)或PM(下午)來說明是上午還是下午。例如:12pm
4)能夠指定命令執行的具體日期,指定格式為month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必須跟在指定時間的後面。例如:04:00 2009-03-1
5)能夠使用相對計時法。指定格式為:now + count time-units ,now就是當前時間,time-units是時間單位,這里能夠是minutes(分鍾)、hours(小時)、days(天)、weeks(星期)。count是時間的數量,幾天,幾小時。例如:now + 5 minutes 04pm + 3 days
6)能夠直接使用today(今天)、tomorrow(明天)來指定完成命令的時間。

❻ Linux中的at命令有什麼用

at命令用來安排一個程序在未來的做一次一次性執行。所有提交的任務都被放在 /var/spool/at 目錄下並且到了執行時間的時候通過atd守護進程來執行。還有不會的請參考《linux就該這么學》,針對各種linux疑難雜症,幫助linux學習者。

❼ linux中at命令

at命令
at:計劃任務,在特定的時間執行某項工作,在特定的時間執行一次。
格式:at+時間
例1:date //查看系統當前時間
at 時間 //系統計劃啟動任務時間
at> date >/root/1.txt //date:系統計劃啟動任務時間執行date命令;/root/1.txt執行命令寫入位

置和文件
ctrl+d退出 //退出at命令
例2:date //查看系統當前時間
at 時間 //系統計劃啟動任務時間
at> init 0 /root/2.txt //init 0:系統計劃啟動任務時間執行init 0(關機)命令;/root/2.txt執

行命令寫入位置和文件

例3:在固定時間內添加一個用戶(這時建立的用戶沒有密碼)
#at 12:00(時間) //at命令設定12:00執行一項操作
at>useradd aaa //在at命令里設定添加用戶aaa
ctrl+d //退出at命令
tail -f /etc/passwd //查看/etc/passwd文件後十行是否增加了一個用戶aaa

計劃任務結束後,查看任務是否寫入文件中,可以用cat或vi命令查看。
格式:cat(vi)+(路徑)文件名
例1:cat(vi) 1.txt
日 2月 6 09:21:28 CST 2005
計劃任務設定後,在沒有執行之前我們可以用atq命令來查看系統沒有執行工作任務。
格式:atq
例:atq
1 2005-02-06 09:23 a root

啟動計劃任務後,如果不想啟動設定好的計劃任務可以使用atrm命令刪除。
格式:atrm+任務號
例:atrm 1 //刪除計劃任務1
atq //查看計劃任務是否刪除

還可以進入到/var/spool/at目錄里把計劃任務刪除,計劃任務的文件都保存在該目錄里,可以用rm -f

文件名來刪除(以文件的形式刪除計劃任務,因為計劃任務是以文件形式保存在該目錄中)
例:#cd /var/spool/at //進入到/var/spool/at目錄中
ls //顯示目錄中所有文件
rm -f a0000a0119b0df //刪除計劃任務

在通常情況下,超級用戶都可以使用這個命令。對於其他用戶來說,能否可以使用就取決於兩個文

件:/etc/at.allow和/etc/at.deny。
當「用戶名」寫入/etc/at.deny中,用戶不能執行at命令(管理員限制用戶使用at命令)。
例:useradd text //新建一個text用戶
ls /etc/at.deny //查看at.deny文件內容
vi /etc/at.deny //對at.deny文件進行編輯
text //對at.deny文件進行編輯,寫入text用戶名,進行at命令限制,然後wq(保存退出)
cat /etc/at.deny //顯示at.deny文件內容
su - text //切換到text用戶
at 12:00 //text用戶執行at命令,如果被限制則出現下面的提示。
You do not have permission to use at.你不允許使用at這個命令

at.allow比at.deny優先順序高
at.allow文件中有的用戶可以執行at,沒有則不能。
linux操作系統在執行用戶是否可以執行at命令時,先看at.allow文件沒有才看at.deny文件。
注意:linux操作系統默認沒有/etc/at.allow文件。
例:ls /etc/at.allow //查看是否已經建立at.allow文件
touch /etc/at.allow //建立/etc/at.allow文件
vi /etc/at.allow //對at.allow文件進行編輯
text //對at.allow文件進行編輯,寫入text用戶名,該用戶名可以執行at命令,然後wq(保存退出)。
su - text //切換到text用戶
at 12:00 //text用戶執行at命令,若不出現上面所說的提示就可以進行at命令設定了。

at命令格式
at HH:MM YYYY-MM-DD //HH(小時):MM(分鍾) YYYY(年)-MM(月份)-DD(日)
例:at 4:00 2004-11-27
HH[am pm]+D(天) days //HH(小時)[am(上午)pm(下午)]+days(天)
例:4pm + 3days :3天以後下午4:00執行at命令設定的計劃任務。

熱點內容
如何用安卓編譯項目 發布:2025-01-24 08:30:46 瀏覽:863
計算機同時輸出和存儲設備的區別 發布:2025-01-24 08:29:21 瀏覽:581
食物語上傳 發布:2025-01-24 07:58:44 瀏覽:754
編程相關書籍 發布:2025-01-24 07:55:45 瀏覽:430
英雄聯盟手游需要哪些配置 發布:2025-01-24 07:42:03 瀏覽:985
regex可以靜態編譯嗎 發布:2025-01-24 07:40:32 瀏覽:79
怎麼編譯rec 發布:2025-01-24 07:39:04 瀏覽:56
卡片沒加密 發布:2025-01-24 07:33:56 瀏覽:381
linux備份mysql 發布:2025-01-24 07:26:54 瀏覽:391
蘋果手機忘記id密碼怎麼刷機 發布:2025-01-24 07:26:47 瀏覽:695