展開(kāi)
湖北國聯(lián)計算機科技有限公司
  • 首頁(yè)HOME
  • 公司簡(jiǎn)介INTRODUCTION
  • 安全防御DEFENSE
  • 軟件開(kāi)發(fā)SOFTWARE
  • 物聯(lián)網(wǎng)IOT
  • 運行維護SRE
  • 成功案例CASE
  • 聯(lián)系我們CONTACT
  • Technology Services |技術(shù)服務(wù)

    Linux at命令詳解
    來(lái)源:腳本之家-良許Linux 時(shí)間:2021-11-13


    生活中,我們有太多場(chǎng)景需要使用到鬧鐘,比如早上7點(diǎn)起床,下午4點(diǎn)開(kāi)會(huì ),晚上8點(diǎn)購物,等等。

    在 Linux 系統里,我們同樣也有類(lèi)似的需求。比如我們想在凌晨1點(diǎn)將文件上傳服務(wù)器,或者在晚上10點(diǎn)確認系統狀態(tài),等等。

    但我們不可能一直守在電腦前,畢竟我們也需要下班/睡覺(jué),還要陪女朋友(new一個(gè)也行)。而且即使在上班期間,如果到點(diǎn)了還需要人工操作,未免效率太低了。

    at命令就是為這個(gè)需求而誕生的。使用at命令,你可以在特定時(shí)間自動(dòng)完成你所設定的任務(wù),也可以實(shí)現自動(dòng)化,非常方便快捷!

    一、安裝at命令

    一般來(lái)講,大部分Linux發(fā)行版都已經(jīng)安裝了at命令,不確定的話(huà)可以使用at-V命令查看,如果有版本返回,說(shuō)明就可以正常使用at命令。

    $ at -V

    at version 3.1.13

    你可能還需要啟動(dòng)at守護進(jìn)程,稱(chēng)為atd。在大多數Linux系統上,你可以使用systemctl命令啟用atd服務(wù)并將它們設置為從現在開(kāi)始自動(dòng)啟動(dòng):

    $ sudo systemctl enable --now atd

    二、at命令基本用法

    1、語(yǔ)法

    at [選項] [日期時(shí)間]

    2、選項

    -f:指定包含具體指令的任務(wù)文件

    -q:指定新任務(wù)的隊列名稱(chēng)

    -l:顯示待執行任務(wù)的列表

    -d:刪除指定的待執行任務(wù)

    -m:任務(wù)執行完成后向用戶(hù)發(fā)送E-mail

    3、參數

    日期時(shí)間:指定任務(wù)執行的日期時(shí)間

    三、使用at命令交互性安排任務(wù)

    想想看,我們平時(shí)是怎么使用鬧鐘這個(gè)工具的?首先我們點(diǎn)擊鬧鐘軟件上的加號,然后再設定時(shí)間,再在備注里輸入鬧鐘的目的。

    使用 at 命令交互性安排任務(wù)也是一樣的道理。首先你輸入at命令,然后再跟上具體的時(shí)間。

    回車(chē)之后就進(jìn)入到交互性界面,你再具體輸入要做的事情(命令),最后以結束輸入,任務(wù)就設置好了。

    例如,你想在早上11:20的時(shí)候,在at-test.txt文檔里寫(xiě)入hello world這句話(huà),可以這樣交互性輸入:

    $ at 11:20 AM

    warning: commands will be executed using /bin/sh

    at> echo "hello world" > ~/at-test.txt

    at>

    job 3 at Mon Jul 26 11:20:00 2021

    如上所示,at命令使用直觀(guān)和自然的時(shí)間格式。你不需要知道24小時(shí)制或將時(shí)間轉換為UTC格式。通常,可以直接使用我們生活中常用的單詞它就能理解,例如noon、1:30PM、13:37等。

    在11:20過(guò)后,你可以使用cat命令檢查一下at-test.txt文件是否有內容寫(xiě)入:

    $ cat ~/at-test.txt

    hello world

    四、使用 at 命令安排任務(wù)

    如果你不想使用交互的方式來(lái)給at命令安排任務(wù),可以使用管道將echo或printf的值傳遞給at命令。

    比如,我想從現在開(kāi)始一分鐘后向at-test.txt文件寫(xiě)入hello again語(yǔ)句:

    $ echo "echo 'hello again' >> ~/at-test.txt" | at now +1 minute

    一分鐘后,驗證新命令是否已執行:

    $ cat ~/at-test.txt

    hello world

    hello again

    五、時(shí)間表達式

    前面提到過(guò),at命令使用的是我們日常生活中所使用的時(shí)間格式,非常方便:

    YYMMDDhhmm[.ss] (縮寫(xiě)年、月、日、小時(shí)、分鐘[秒])

    CCYYMMDDhhmm[.ss] (完整年、月、日、小時(shí)、分鐘和[秒])

    now

    midnight

    noon

    teatime`(下午4點(diǎn))

    AM

    PM

    時(shí)間和日期可以是絕對的,也可以添加一個(gè)加號 ( + ) 使它們相對于現在。在指定相對時(shí)間時(shí),下面這些日常生活中所使用的詞匯都可以使用:

    minutes

    hours

    days

    weeks

    months

    years

    下面是一些at命令有效表達式的示例:

    $ echo "rsync -av /home/tux me@myserver:/home/tux/" | at 3:30 AM tomorrow

    $ echo "/opt/batch.sh ~/Pictures" | at 3:30 AM 08/01/2022

    $ echo "echo hello" | at now + 3 days

    六、查看 at 任務(wù)隊列

    隨時(shí)時(shí)間的推移,我們可以忘記在at命令隊列時(shí)設置了多少個(gè)任務(wù),如果你想進(jìn)行查看,可以使用atq命令:

    $ atq

    10 Thu Jul 29 12:19:00 2021 a tux

    9  Tue Jul 27 03:30:00 2021 a tux

    7  Tue Jul 27 00:00:00 2021 a tux

    要從隊列中刪除任務(wù),請使用atrm命令和任務(wù)編號。例如要刪除任務(wù) 7 :

    $ atrm 7

    $ atq

    10 Thu Jul 29 12:19:00 2021 a tux

    9  Tue Jul 27 03:30:00 2021 a tux

    如果想要查看計劃任務(wù)中的具體內容,就必須查看at spool。只有root用戶(hù)才能查看at spool,因此你必須使用sudo來(lái)查看spool或cat任務(wù)的內容。

    七、小結

    at命令是避免忘記在將來(lái)特定時(shí)間的任務(wù)或在你離開(kāi)時(shí)讓計算機為你運行任務(wù)的非常好的方式。與cron命令不一樣的是,它不需要使任務(wù)從現在一直循環(huán)運行,因此它的語(yǔ)法比cron簡(jiǎn)單得多。

    下次你想在下班后讓系統為你做個(gè)工作,可以試試at命令。


    荊州地區政府網(wǎng)站建設 解決方案 專(zhuān)業(yè)團隊 騰訊第三方平臺 地址:湖北省荊州市沙市區荊沙大道楚天都市佳園一期C區29棟112       地址:湖北省松滋市新江口街道才知文化廣場(chǎng)1幢1146-1151室     郵編:434200 聯(lián)系電話(huà):0716-6666211     網(wǎng)站編輯部郵箱:business@gl-ns.com 鄂公網(wǎng)安備 42100202000212號 備案號:鄂ICP備2021015094號-1     企業(yè)名稱(chēng):湖北國菱計算機科技有限公司