Linux 系統管理之一次性定時任務 at 的使用

環境Centos 6.5

at 一次性定時任務

at 命令是用來執行一次性任務,比如要在二十分鐘後重啓,要在 2 分鐘後啓動一個可執行程序,或者在一天後執行一個腳本。適合應對突發性和臨時性的任務。

1、查看 at 服務是否安裝(守護進程 atd 爲 at 命令提供服務)

[Jack@www regular_time]$ chkconfig --list | grep atd
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
# 3 和 5 級別是字符界面和圖像界面這兩個 on就表示已經安裝

2、查看服務是否在運行

[Jack@www regular_time]$ service atd status
atd (pid  2198) is running...

顯示服務正在運行,如果沒有運行可以執行service atd restart 重新啓動一下服務。

3、at 的 黑名單和白名單

在系統的 /etc 目錄下可能會有兩個關於 at 命令使用限制的文件,一個是黑名單(etc/at/deny)一個是白名單(/etc/at.allow),一般只有一個黑名單文件,因爲大部分情況下是允許執行 at 命令的,如果使用白名單,有 100 個用戶的話,豈不是要寫100行,但黑名單只需要把被限制的一兩個寫上就行。

  1. 如果系統中有/etc/at.allow 文件,那麼只有被寫入該文件的用戶纔可以執行 at 命令(將使用者的賬號寫入即可,一個一行)相當於白名單文件,此時/etc/at.deny就會被忽略,相當於黑名單。
  2. 如果系統中沒有/etc/at.allow文件,只有/etc/at.deny,那麼被寫入該文件的用戶就不能使用 at 命令,黑名單對 root 不起作用。
  3. 如果兩個文件都不存在,那麼只有root 用戶可以執行。

4、at 命令的說明

選項:

[root@www /]# at [-ldc] 
[root@www /]# at 時間

-l:列出當前用戶的at任務列表,也可使用 atq
-d 任務編號:取消一個at 任務,後面跟 at 任務編號,也可使用atrm 任務編號代替
-c 任務編號:顯示該任務的實際內存,如:at -c 1 ,顯示 1 號任務的詳情

at 時間有多種指定方式:

  1. HH:MM 如: at 02:30
  2. HH:MM YYYY-MM-DD 如:at 8:00 2020-01-01
  3. HH:MM[am | pm] [month] [date] 如:at 8:00 Oct 1 # 在十月一號的八點
    4.HHlMM[am | pm] + number [minutes | hours | days | weeks] 如:at 8:00 + 1days
  4. 最常用的的一個時間:now + 時間 比如在十分鐘後:at now + 10 minutes,在一天後:at now + 1 days

5、at 命令的使用示例

比如現在根目錄下有一個腳本文件 hello.sh在根目錄下創建一個文件 at.txt,並寫入一句話hello

#!/bin/bash
touch at.txt
echo "hello" > /at.txt

現在需要使用at 命令設定在5分鐘後執行該腳本文件:

[root@www /]# at now + 5 minutes
at> /hello.sh
at> <EOT>   # 在輸入命令後 按 ctrl +d 結束輸入,並提示我們 此任務編號爲7
job 7 at 2017-07-08 19:15  
[root@www /]#

然後查看所有 at 任務,可以看到剛纔添加的 7 號任務:

[root@www /]# at -l
5   2017-10-01 08:00 a root
7   2017-07-08 19:15 a root
6   2017-07-09 19:01 a root
[root@www /]#

查看 7 號任務的詳情:

 [root@www /]# at -c 7
#!/bin/sh
# atrun uid=0 gid=0
...
...
...
# 省略一大堆系統設置的變量
${SHELL:-/bin/sh} << 'marcinDELIMITER1585a268'
/hello.sh # 這就是我們要執行的命令

marcinDELIMITER1585a268
[root@www /]#

刪除 7 號命令,再次查看已經被刪除:

[root@www /]# at -d 7
[root@www /]# at -l
5   2017-10-01 08:00 a root
6   2017-07-09 19:01 a root
[root@www /]#

總結:

at 是一個一次性定時的命令,守護進程 atd 爲它提供服務。如果需要週期性定時任務,需要使用 crontab 命令。
發佈了127 篇原創文章 · 獲贊 199 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章