環境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行,但黑名單只需要把被限制的一兩個寫上就行。
- 如果系統中有
/etc/at.allow
文件,那麼只有被寫入該文件的用戶纔可以執行 at 命令(將使用者的賬號寫入即可,一個一行)相當於白名單文件,此時/etc/at.deny
就會被忽略,相當於黑名單。 - 如果系統中沒有
/etc/at.allow
文件,只有/etc/at.deny
,那麼被寫入該文件的用戶就不能使用 at 命令,黑名單對 root 不起作用。 - 如果兩個文件都不存在,那麼只有root 用戶可以執行。
4、at 命令的說明
選項:
[root@www /]# at [-ldc]
[root@www /]# at 時間
-l:列出當前用戶的at任務列表,也可使用 atq
-d 任務編號:取消一個at 任務,後面跟 at 任務編號,也可使用atrm 任務編號代替
-c 任務編號:顯示該任務的實際內存,如:at -c 1 ,顯示 1 號任務的詳情
at 時間有多種指定方式:
- HH:MM 如: at 02:30
- HH:MM YYYY-MM-DD 如:at 8:00 2020-01-01
- HH:MM[am | pm] [month] [date] 如:at 8:00 Oct 1 # 在十月一號的八點
4.HHlMM[am | pm] + number [minutes | hours | days | weeks] 如:at 8:00 + 1days - 最常用的的一個時間: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 命令。