【linux】循序漸進學運維-基礎篇-at命令


大家好,我是高勝寒,本文是Linux運維-循序漸進學運維-基礎篇的第52篇文章。

前言:

今天我們一起聊聊關於計劃任務當中的一個命令:at

大家都比較熟悉crontab計劃任務,對at命令可能稍微有些模式。 crontab一般指的是週期性的計劃任務。 但是我們在生活中也有一些任務是單次執行的,比如20分鐘之後要重啓,2分鐘之後執行一個腳本

at適合用在應對臨時性和突發性的任務上。

計劃任務的分類:

計劃任務的安排方式分兩種:
一種是定時性的,也就是例行。就是每隔一定的週期就要重複來做這個事情
一種是突發性的,就是這次做完了這個事,就沒有下一次了,臨時決定,只執行一次的任務

用命令來描述就是at和crontab這兩個命令:
at:它是一個可以處理僅執行一次就結束的指令
crontab:它是會把你指定的工作或任務,比如:腳本等,按照你設定的週期一直循環執行下去

at命令的使用

1) 語法格式:

at + 時間

2) 查看是否安裝

at的服務是atd

[root@xinsz08-15 ~]# chkconfig --list |grep atd
atd             0:關閉  1:關閉  2:關閉  3:啓用  4:啓用  5:啓用  6:關閉

可以查看到正在運行

[root@xinsz08-15 ~]# service atd status
atd (pid  2635) 正在運行...
[root@xinsz08-15 ~]# 

3) 常用參數
選項 作用
f 指定包含具體指令的任務文件
q 指定新任務的隊列名稱
l 顯示待執行任務的列表
d 刪除指定的待執行任務
m 執行完畢後向用戶發送郵件
1) at實戰舉例
a) 21:50 創建一個文件
[root@zmgaosh ~]# at 21:50
at> mkdir /root/2150
at> <EOT>  (這裏按的是ctrl +D )
job 2 at Mon Jun 29 21:50:00 2020

查看計劃任務的兩種方式:

方法一: at -l

[root@zmgaosh ~]# at -l   
2       Mon Jun 29 21:50:00 2020 a root
[root@zmgaosh ~]# 

方法二: atq

[root@zmgaosh ~]# atq
2       Mon Jun 29 21:50:00 2020 a root
[root@zmgaosh ~]# 

b) 三天後的下午5點執行touch /root/b.txt
[root@zmgaosh ~]# at 5pm+3 days
at> /bin/touch /root/b.txt
at> <EOT>
job 3 at Thu Jul  2 17:00:00 2020

c) 明天下午5點,輸出時間到指定文件內
[root@zmgaosh ~]# at 17:00 tomorrow
at> date >/root/17.txt
at> <EOT>
job 4 at Tue Jun 30 17:00:00 2020

d) 查看第4個計劃任務

方法一:

[root@zmgaosh ~]# at -l   查看現有的任務
2       Mon Jun 29 21:50:00 2020 a root
4       Tue Jun 30 17:00:00 2020 a root
3       Thu Jul  2 17:00:00 2020 a root
[root@zmgaosh ~]# at -c 4   #查看第四個任務的具體內容
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=307; export XDG_SESSION_ID
HOSTNAME=zmgaosh; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=10000; export HISTSIZE
SSH_CLIENT=120.244.154.174\ 3724\ 22; export SSH_CLIENT
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export.....省略一大堆內容)
cd /root || {
         echo 'Execution directory inaccessible' >&2
         exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER3f0ead97'
date >/root/17.txt

marcinDELIMITER3f0ead97

可以看到,最後執行的是 data > root/17.txt

方法二:

[root@zmgaosh ~]# ls /var/spool/at
a0000201953b7e  a0000301954b3c  a0000401953ffc  spool
[root@zmgaosh ~]# tail -5 /var/spool/at/a0000401953ffc 
}
${SHELL:-/bin/sh} << 'marcinDELIMITER3f0ead97'
date >/root/17.txt

marcinDELIMITER3f0ead97
[root@zmgaosh ~]# 

也可以看到 date >/root/17.txt

以上兩個方法都可以

e) 刪除一個計劃任務

使用命令atrm
方法: atrm + 任務編號

[root@zmgaosh ~]# at -l
2       Mon Jun 29 21:50:00 2020 a root
4       Tue Jun 30 17:00:00 2020 a root
3       Thu Jul  2 17:00:00 2020 a root
[root@zmgaosh ~]# atrm 4
[root@zmgaosh ~]# at -l
2       Mon Jun 29 21:50:00 2020 a root
3       Thu Jul  2 17:00:00 2020 a root
[root@zmgaosh ~]# 

補充:

還記得 a) 裏面我們設置的21:50創建文件嗎,寫到現在正好21:50,我們來查看結果:

[root@zmgaosh ~]# ll
總用量 12
drwxr-xr-x 2 root root 4096 6月  29 21:50 2150

我們再來看看這個計劃任務執行完之後,現存的計劃任務還有幾個:

[root@zmgaosh ~]# atq
3       Thu Jul  2 17:00:00 2020 a root
[root@zmgaosh ~]# at -l
3       Thu Jul  2 17:00:00 2020 a root
[root@zmgaosh ~]# 

可以看到還剩一個,因爲有一個我們使用atrm +編號給刪除了。

總結:

我們來總結下今天的內容:

作用 命令
定製計劃任務: at + 時間
查看計劃任務: atq && at -l
查看具體某一個的計劃任務: at -c +編號
刪除計劃任務 atrm +編號

是不是很簡單,趕緊操練起來吧,我是高勝寒,一個在教培行業不忘初心的人,歡迎點贊收藏,如果有問題也可以留言與我一起交流。我們下期再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章