centos

查看 at 服务是否安装(守护进程 atd 为 at 命令提供服务)

centos7

[root@php.svn-server ~]
# systemctl list-units  | grep atd
atd.service                                                                                                 loaded active running   Job spooling tools

centos6

[root@php.svn-server ~]
$ chkconfig --list | grep atd
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
# 3 和 5 级别是字符界面和图像界面这两个 on就表示已经安装

查看是否运行 centos7 用systemctl

# centos7
$ systemctl status atd
# centos6
$ service atd status

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 用户可以执行。

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 # 在十月一号的八点
HHlMM[am | pm] + number [minutes | hours | days | weeks] 如:at 8:00 + 1days
最常用的的一个时间:now + 时间 比如在十分钟后:at now + 10 minutes,在一天后:at now + 1 days

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 2019-01-08 19:15  
[root@www /]#

然后查看所有 at 任务,可以看到刚才添加的 7 号任务:

[root@www /]# at -l
7   2019-01-08 19:15 a root

[root@www /]#v

查看 7 号任务的详情:

[root@www /]# at -c 7
#!/bin/sh
# atrun uid=0 gid=0
...
...
...
# 省略一大堆系统设置的变量
${SHELL:-/bin/sh} &lt;&lt; 'marcinDELIMITER1585a268'
/hello.sh # 这就是我们要执行的命令

marcinDELIMITER1585a268
[root@www /]#

删除 7 号命令,再次查看已经被删除:

[root@www /]# at -d 7
[root@www /]# at -l
#

mac terminal下无法使用 at 命令

在mac环境下terminal中使用 at 命令定时执行作业不能成功 。时间到了不执行。

使用at -l查看作业时候显示作业存在

执行 man atrun 命令得到如下信息

图

运行这条命令成功解决

Last modification:January 31, 2020
如果觉得我的文章对你有用,请随意赞赏