at 定时任务

at 定时任务

at 命令用于指定一个定时任务,在某个特定的时间节点执行一次。相比于 cronanacronat 命令非常简单易用。

同样的,时间精确度最多也只能到分钟,我估计 Linux 的定时任务精度最高也只能到分了?如果我想定时在多少秒执行任务怎么办?TODO

准备工作

要想使用 at 命令,读者需提前安装好 at 软件包,并开启 atd 服务

查看 at 软件包是否已安装,可以使用 rpm -q

这样表示已安装,如果未安装,则需要通过

yum -y install at

进行安装。

除此之外,at 命令要想正确执行,还需要 atd 服务的支持。atd 服务是独立的服务,跟前面的所有服务一样,都有

这一套命令。

at 命令的用法

at [参数] [时间表达式]

常用的就是 -f -l -d -c

简单实践:

如果不使用管道 | 或指定选项 -f 的话,at 的执行将会是交互式的,需要在 at 的提示符下输入命令,输入完成之后,换行 + Ctrl+D 或者两次 Ctrl+D,表示输入完毕。

now+1 minutes:表示执行时间为从现在开始之后的第二分钟,

echo hello:输出 hello,注意,跟前面的 crontabanacron 一样,执行命令如果没有重定向到别的地方,命令执行的结果默认会发送到执行人的邮箱,at 命令的执行人就是定时任务的添加人,也就是说如果添加人是 lk,那么结果就会发送到 /var/spool/mail/lk

输入结束之后会会显示任务 ID 和任务执行时间

邮件:

有时候为了批量执行多个命令,你可以在这里输入对 .sh 文件的调用(要有对这个文件的执行权限)。

不过大部分的时候,为了方便,我们一般都是从文件中读取,文件中可以包含多条指令,指令中可以直接写命令名(比如 ls),不需要写命令的全路径(/usr/bin/ls)。因为这里将输出重定向到文件中了,所以不会 lk 不会收到邮件。

然后调用 at -f atfile.txt now+1 minutes

一分钟之后,在相应的文件中即可看到内容,

在任务还未执行的时候,可通过 at -l 或者 atq 查看任务

然后可以直接通过 at -c <任务ID> 查看任务的内容

此时也可以在 /var/spool/at 文件夹中看到对应的文件(只不过文件名和任务 ID 不对应)

查看 a00009019f943d 的内容其实就是我们通过 at -c <任务ID> 查看到的内容。

在任务还未执行的时候,我们可以删除它,at -d <任务ID> 或者 atrm <任务ID>

时间表达式

at 命令中,最难掌握的是时间表达式,指定时间的方法很丰富(具体可查看 /usr/share/doc/at-3.1.13/timespec),可以是:

写的时候可以多试几次,at 命令运行之后会在后面输出 job id 和运行时间,时间不对的话按照 job id 删掉任务即可

at 命令相关文件