每天乙個linux命令(49) at命令

2021-12-30 13:21:43 字數 4637 閱讀 7392

在windows系統中,windows提供了計畫任務這一功能,在控制面板->效能與維護->任務計畫,它的功能就是安排自動執行的任務。通過』新增任務計畫』的一步步引導,則可建立乙個定時執行的任務。

在linux系統中你可能已經發現了為什麼系統常常會自動的進行一些任務?這些任務到底是誰在支配他們工作的?在linux系統如果你想要讓自己設計的備份程式可以自動在某個時間點開始在系統底下執行,而不需要手動來啟動它,又該如何處置呢?這些例行的工作可能又分為一次性定時工作與迴圈定時工作,在系統內又是哪些服務在負責?還有,如果你想要每年在老婆的生日前一天就發出一封信件提醒自己不要忘記,linux系統下該怎麼做呢?

今天我們主要學習一下一次性定時計畫任務的at命令的用法!

1.命令格式:

at[引數][時間]

2.命令功能:

在乙個指定的時間執行乙個指定任務,只能執行一次,且需要開啟atd程序(

ps-ef|grepatd檢視,開啟用/etc/init.d/atdstartorrestart;開機即啟動則需要執行 chkconfig–level2345atdon)。

3.命令引數:

-m當指定的任務被完成之後,將給使用者傳送郵件,即使沒有標準輸出

-iatq的別名

-datrm的別名

-v顯示任務將被執行的時間

-c列印任務的內容到標準輸出

-v顯示版本資訊

-q列使用指定的列隊

-f文從指定檔案讀入任務而不是從標準輸入讀入

-t時間參以時間引數的形式提交要執行的任務

at允許使用一套相當複雜的指定時間的方法。他能夠接受在當天的hh:mm(小時:分鐘)式的時間指定。假如該時間已過去,那麼就放在第二天執行。當然也能夠使用midnight(深夜),noon(中午),teatime(飲茶時間,一般是下午4點)等比較模糊的詞語來指定時間。使用者還能夠採用12小時計時制,即在時間後面加上am(上午)或pm(下午)來說明是上午還是下午。也能夠指定命令執行的具體日期,指定格式為monthday(月日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必須跟在指定時間的後面。上面介紹的都是絕對計時法,其實還能夠使用相對計時法,這對於安排不久就要執行的命令是很有好處的。指定格式為:now+counttime-units,now就是當前時間,time-units是時間單位,這裡能夠是minutes(分鐘)、hours(小時)、days(天)、weeks(星期)。count是時間的數量,究竟是幾天,還是幾小時,等等。更有一種計時方法就是直接使用today(今天)、tomorrow(明天)來指定完成命令的時間。

time:時間格式,這裡可以定義出什麼時候要進行at這項任務的時間,格式有:

hh:mm

ex>04:00

在今日的hh:mm時刻進行,若該時刻已超過,則明天的hh:mm進行此任務。

hh:mmyyyy-mm-dd

ex>04:002009-03-17

強制規定在某年某月的某一天的特殊時刻進行該項任務

hh:mm[am|pm][month][date]

ex>04pmmarch17

也是一樣,強制在某年某月某日的某時刻進行該項任務

hh:mm[am|pm]+number[minutes|hours|days|weeks]

ex>now+5minutes

ex>04pm+3days

就是說,在某個時間點再加幾個時間後才進行該項任務。

4.使用例項:

例項1:三天後的下午5點鐘執行/bin/ls

命令:at5pm+3days

輸出:[root@localhost~]#at5pm+3days

at>/bin/ls

at>

job7at2013-01-0817:00

[root@localhost~]#

說明:例項2:明天17點鐘,輸出時間到指定檔案內

命令:at17:20tomorrow

輸出:[root@localhost~]#at17:20tomorrow

at>date>/root/2013.log

at>

job8at2013-01-0617:20

[root@localhost~]#

說明:例項3:計畫任務設定後,在沒有執行之前我們可以用atq命令來檢視系統沒有執行工作任務

命令:atq

輸出:[root@localhost~]#atq

82013-01-0617:20aroot

72013-01-0817:00aroot

[root@localhost~]#

說明:例項4:刪除已經設定的任務

命令:atrm7

輸出:[root@localhost~]#atq

82013-01-0617:20aroot

72013-01-0817:00aroot

[root@localhost~]#atrm7

[root@localhost~]#atq

82013-01-0617:20aroot

[root@localhost~]#

說明:例項5:顯示已經設定的任務內容

命令:at-c8

輸出:[root@localhost~]#at-c8

#!/bin/sh

#atrunuid=0gid=0

#mailroot0

umask22此處省略n個字元

date>/root/2013.log

[root@localhost~]#

說明:例項6:

命令:輸出:

說明:5.atd的啟動與at執行的方式:

5.1atd的啟動

要使用一次性計畫任務時,我們的linux系統上面必須要有負責這個計畫任務的服務,那就是atd服務。不過並非所有的linuxdistributions都缺省會把他開啟的,所以,某些時刻我們需要手動將atd服務啟用才行。啟用的方法很簡單,就是這樣:

命令:/etc/init.d/atdstart

/etc/init.d/atdrestart

輸出:[root@localhost/]#/etc/init.d/atdstart

[root@localhost/]#/etc/init.d/atd

用法:/etc/init.d/atd

[root@localhost/]#/etc/init.d/atdstop

停止atd:[確定]

[root@localhost/]#ps-ef|grepatd

root2506224951014:53pts/000:00:00grepatd

[root@localhost/]#/etc/init.d/atdstart

[確定]td:[確定]

[root@localhost/]#ps-ef|grepatd

root250681014:53?00:00:00/usr/sbin/atd

root2507124951014:53pts/000:00:00grepatd

[root@localhost/]#/etc/init.d/atdrestart

停止atd:[確定]

[確定]td:[確定]

[root@localhost/]#

說明:/etc/init.d/atdstart沒有啟動的時候,直接啟動atd服務

/etc/init.d/atdrestart服務已經啟動後,重啟atd服務

備註:配置一下啟動時就啟動這個服務,免得每次重新啟動都得再來一次

命令:chkconfigatdon

輸出:[root@localhost/]#chkconfigatdon

[root@localhost/]#

5.2at的執行方式

既然是計畫任務,那麼應該會有任務執行的方式,並且將這些任務排進行程表中。那麼產生計畫任務的方式是怎麼進行的?事實上,我們使用at這個命令來產生所要執行的計畫任務,並將這個計畫任務以文字檔的方式寫入/var/spool/at/目錄內,該工作便能等待atd這個服務的取用與執行了。就這麼簡單。

不過,並不是所有的人都可以進行at計畫任務。為什麼?因為系統安全的原因。很多主機被所謂的攻擊破解後,最常發現的就是他們的系統當中多了很多的黑客程式,這些程式非常可能運用一些計畫任務來執行或蒐集你的系統執行資訊,並定時的傳送給黑客。所以,除非是你認可的帳號,否則先不要讓他們使用at命令。那怎麼達到使用at的可控呢?

我們可以利用/etc/at.allow與/etc/at.deny這兩個檔案來進行at的使用限制。加上這兩個檔案後,at的工作情況是這樣的:

先找尋/etc/at.allow這個檔案,寫在這個檔案中的使用者才能使用at,沒有在這個檔案中的使用者則不能使用at(即使沒有寫在at.deny當中);

如果/etc/at.allow不存在,就尋找/etc/at.deny這個檔案,若寫在這個at.deny的使用者則不能使用at,而沒有在這個at.deny檔案中的使用者,就可以使用at命令了。

如果兩個檔案都不存在,那麼只有root可以使用at這個命令。

透過這個說明,我們知道/etc/at.allow是管理較為嚴格的方式,而/etc/at.deny則較為鬆散(因為帳號沒有在該檔案中,就能夠執行at了)。在一般的distributions當中,由於假設系統上的所有使用者都是可信任的,因此系統通常會保留乙個空的/etc/at.deny檔案,意思是允許所有人使用at命令的意思(您可以自行檢查一下該檔案)。不過,萬一你不希望有某些使用者使用at的話,將那個使用者的帳號寫入/etc/at.deny即可!乙個帳號寫一行。

每天乙個Linux命令

將我遇到的linux指令總結一下,不斷增加 1 sz和rz 一般來說,linux 伺服器大多是通過 ssh客戶端來進行遠端的登陸和管理的,使用 ssh登陸 linux ssh有關的兩個命令可以提供很方便的操作 sz 將選定的檔案傳送 send 到本地機器 rz 執行該命令會彈出乙個檔案選擇視窗,從本...

每天乙個linux命令

linux cmp命令 linux cmp命令用於比較兩個檔案是否有差異。當相互比較的兩個檔案完全一樣時,則該指令不會顯示任何資訊。若發現有所差異,缺省會標示出第乙個不同之處的字元和列數編號。若不指定任何檔名稱或是所給予的檔名為 則cmp指令會從標準輸入裝置讀取資料。語法cmp clsv i 字元數...

每天乙個 Linux 命令

head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾。1 命令格式 head 引數 檔案 2 命令功能 head 用來顯示檔案的開頭至標準輸出中,預設head命令列印其相應檔案的...