Linux at命令詳解
來源:腳本之家-良許Linux
時間:2021-11-13
生活中,我們有太多場景需要使用到鬧鐘,比如早上7點起床,下午4點開會,晚上8點購物,等等。
在 Linux 系統(tǒng)里,我們同樣也有類似的需求。比如我們想在凌晨1點將文件上傳服務器,或者在晚上10點確認系統(tǒng)狀態(tài),等等。
但我們不可能一直守在電腦前,畢竟我們也需要下班/睡覺,還要陪女朋友(new一個也行)。而且即使在上班期間,如果到點了還需要人工操作,未免效率太低了。
at命令就是為這個需求而誕生的。使用at命令,你可以在特定時間自動完成你所設定的任務,也可以實現(xiàn)自動化,非常方便快捷!
一、安裝at命令
一般來講,大部分Linux發(fā)行版都已經(jīng)安裝了at命令,不確定的話可以使用at-V命令查看,如果有版本返回,說明就可以正常使用at命令。
$ at -V
at version 3.1.13
你可能還需要啟動at守護進程,稱為atd。在大多數(shù)Linux系統(tǒng)上,你可以使用systemctl命令啟用atd服務并將它們設置為從現(xiàn)在開始自動啟動:
$ sudo systemctl enable --now atd
二、at命令基本用法
1、語法
at [選項] [日期時間]
2、選項
-f:指定包含具體指令的任務文件
-q:指定新任務的隊列名稱
-l:顯示待執(zhí)行任務的列表
-d:刪除指定的待執(zhí)行任務
-m:任務執(zhí)行完成后向用戶發(fā)送E-mail
3、參數(shù)
日期時間:指定任務執(zhí)行的日期時間
三、使用at命令交互性安排任務
想想看,我們平時是怎么使用鬧鐘這個工具的?首先我們點擊鬧鐘軟件上的加號,然后再設定時間,再在備注里輸入鬧鐘的目的。
使用 at 命令交互性安排任務也是一樣的道理。首先你輸入at命令,然后再跟上具體的時間。
回車之后就進入到交互性界面,你再具體輸入要做的事情(命令),最后以
例如,你想在早上11:20的時候,在at-test.txt文檔里寫入hello world這句話,可以這樣交互性輸入:
$ at 11:20 AM
warning: commands will be executed using /bin/sh
at> echo "hello world" > ~/at-test.txt
at>
如上所示,at命令使用直觀和自然的時間格式。你不需要知道24小時制或?qū)r間轉(zhuǎn)換為UTC格式。通常,可以直接使用我們生活中常用的單詞它就能理解,例如noon、1:30PM、13:37等。
在11:20過后,你可以使用cat命令檢查一下at-test.txt文件是否有內(nèi)容寫入:
四、使用 at 命令安排任務
如果你不想使用交互的方式來給at命令安排任務,可以使用管道將echo或printf的值傳遞給at命令。
比如,我想從現(xiàn)在開始一分鐘后向at-test.txt文件寫入hello again語句:
一分鐘后,驗證新命令是否已執(zhí)行:
五、時間表達式
前面提到過,at命令使用的是我們?nèi)粘I钪兴褂玫臅r間格式,非常方便:
YYMMDDhhmm[.ss] (縮寫年、月、日、小時、分鐘[秒])
CCYYMMDDhhmm[.ss] (完整年、月、日、小時、分鐘和[秒])
now
midnight
noon
teatime`(下午4點)
AM
PM
時間和日期可以是絕對的,也可以添加一個加號 ( + ) 使它們相對于現(xiàn)在。在指定相對時間時,下面這些日常生活中所使用的詞匯都可以使用:
minutes
hours
days
weeks
months
years
下面是一些at命令有效表達式的示例:
六、查看 at 任務隊列
隨時時間的推移,我們可以忘記在at命令隊列時設置了多少個任務,如果你想進行查看,可以使用atq命令:
要從隊列中刪除任務,請使用atrm命令和任務編號。例如要刪除任務 7 :
如果想要查看計劃任務中的具體內(nèi)容,就必須查看at spool。只有root用戶才能查看at spool,因此你必須使用sudo來查看spool或cat任務的內(nèi)容。
七、小結(jié)
at命令是避免忘記在將來特定時間的任務或在你離開時讓計算機為你運行任務的非常好的方式。與cron命令不一樣的是,它不需要使任務從現(xiàn)在一直循環(huán)運行,因此它的語法比cron簡單得多。
下次你想在下班后讓系統(tǒng)為你做個工作,可以試試at命令。