一、检查服务
检查服务是否安装
# centos6 及Ubuntu chkconfig --list | grep atd # centos7 systemctl list-unit-files |grep atd
在centos7中输出:
[cc@user ~]$ systemctl list-unit-files |grep atd atd.service enabled rpc-statd-notify.service static rpc-statd.service static
检查服务是否启动 上一步检查中,
atd.service
后面对应enadble表示开机自启,现在再检查一遍是否启动成功# centos6 service atd status # centos7 [cc@user ~]$ systemctl status atd ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since 五 2019-08-16 10:56:16 CST; 3 days ago Main PID: 1430 (atd) CGroup: /system.slice/atd.service └─1430 /usr/sbin/atd -f
8月 16 10:56:16 qifeng systemd[1]: Started Job spooling tools. 8月 16 10:56:16 qifeng systemd[1]: Starting Job spooling tools...
设置自启
systemctl enabled atd
## 二、at简单介绍
#### 1. 黑白名单
在系统的 `/etc` 目录下可能会有两个关于 **at**命令使用限制的文件,一个是黑名单(`etc/at/deny`)一个是白名单(`/etc/at.allow`),一般只有一个黑名单文件,因为大部分情况下是允许执行 at 命令的,当然可以根据具体情况设置黑白名单.
1. 如果系统中有`/etc/at.allow `文件,那么只有被写入该文件的用户才可以执行 at 命令,相当于白名单文件
此时`/etc/at.deny`就会被忽略,相当于黑名单。
2. 如果系统中没有`/etc/at.allow`文件,只有`/etc/at.deny`,那么被写入该文件的用户就不能使用 at 命令
黑名单对 root 不起作用。
3. 如果两个文件都不存在,那么只有root 用户可以执行。
#### 2. at命令说明
> at [参数] [时间格式]
**参数说明**
| 参数 | 意义 |
| ---- | -------------------- |
| m | 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出 |
| I | atq的别名 |
| d | atrm的别名 |
| v | 显示任务将被执行的时间 |
| c | 打印任务的内容到标准输出 |
| V | 显示版本信息 |
| q | <列队> 使用指定的列队 |
| f | <文件> 从指定文件读入任务而不是从标准输入读入 |
| t | <时间参数> 以时间参数的形式提交要运行的任务 |
#### 3. 时间格式
at 允许使用一套相当复杂的指定时间的方法。
他能够接受在当天的hh:mm(小时:分钟)式的时间指定。
假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。
用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或 dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。
上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。
指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。
count是时间的数量,究竟是几天,还是几小时,等等。
更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
**一些例子**
* 准时
| 格式 | 代表实例 |
| ---- | ------------------ |
| 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 # 在十月一号的八点 |
| HHlMM [am/pm] + number [minutes | hours | days | weeks] | at 8:00 + 1days |
| now + 时间 | 如在十分钟后:at now + 10 minutes,在一天后:at now + 1 days |
* 超时
| 格式 | 用法 | 含义 |
| ---- | ---- | --------- |
| HH:MM | ex> 04:00 | 在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务 |
| HH:MM YYYY-MM-DD | ex> 04:00 2009-03-17 | 强制规定在某年某月的某一天的特殊时刻进行该项任务 |
| HH:MM[am/pm] [Month] [Date] | ex> 04pm March 17 | 也是一样,强制在某年某月某日的某时刻进行该项任务 |
| HH:MM[am/pm] + number [minutes|hours|days|weeks] | ex> now + 5 minutes 或 ex> 04pm + 3 days | 在某个时间点再加几个时间后才进行该项任务 |
## 三、使用实例
#### 1. 完整使用步骤
创建一个脚本文件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>
[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 /]#
#### 2. 其他实例使用
| 要求 | 命令 |
| ---- | ------- |
| 三天后的下午5点执行 /bin/ls | at 5pm+3 days |
**输出**
[root@localhost ~]# at 5pm+3 days
at> /bin/ls
at>
| 要求 | 命令 |
| ---- | ------- |
| 明天17点钟,输出时间到指定文件内 | at 17:20 tomorrow |
**输出**
[root@localhost ~]# at 17:20 tomorrow
at> date >/root/2013.log
at>
| 要求 | 命令 |
| ---- | ------- |
| 计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务 | atq |
**输出**
[root@localhost ~]# atq 8 2013-01-06 17:20 a root 7 2013-01-08 17:00 a root [root@localhost ~]#
| 要求 | 命令 |
| ---- | ------- |
| 删除已经设置的任务 | atrm 7 |
**输出**
[root@localhost ~]# atq 8 2013-01-06 17:20 a root 7 2013-01-08 17:00 a root [root@localhost ~]# atrm 7 [root@localhost ~]# atq 8 2013-01-06 17:20 a root [root@localhost ~]#
| 要求 | 命令 |
| ---- | ------- |
| 显示已经设置的任务内容 | at -c 8 |
**输出**
[root@localhost ~]# at -c 8 #!/bin/sh
atrun uid=0 gid=0
mail root 0
umask 22此处省略n个字符 date >/root/2013.log [root@localhost ~]#