@

at定时任务简介

生活中,我们有太多场景需要使用到闹钟,比如早上 7 点起床,下午 4 点开会,晚上 8 点购物,等等。在 Linux 系统里,我们同样也有类似的需求。比如我们想在凌晨 1 点将文件上传服务器,或者在晚上 10 点确认系统状态等。但我们不可能一直守在电脑前,进行这种重复性操作。

at 命令就是为这个需求而诞生的。使用 at 命令,可以在用户指定的一个未来的时间来执行一次性任务,而无需手动执行。

  • at 命令是 Linux 和 Unix 系统中的一个用于计划一次性任务的命令

at命令安装

[root@server ~]# dnf  install  at  -y
[root@server ~]# at  -V   # 大写V-查看版本

at服务启动

[root@server ~]# systemctl start  atd #启动守护进程
[root@server ~]# systemctl enable  --now  atd  # 设置开机启动
[root@server ~]# systemctl  status  atd  # 查看状态

at命令基础解析

格式

at  -参数   日期时间

参数

-m:当任务完成后,即使没有标准输出,也会给用户发送邮件
-l:列出系统上所有用户的at任务,等价于atq
-d:删除或取消一个任务
-v:使用时间格式,列出at任务
-c:可以列出任务之后的命令内容
-f:从文件中读取

参数示例(待添加详细示例)

-m:完成任务后发送邮件通知
echo "backup.sh" | at -m 15:00
系统将在下午3点执行 backup.sh,任务完成后即使没有标准输出,系统也会发送邮件通知用户。

-l:列出系统上所有用户的 at 任务
at -l
该命令列出所有当前系统中的 at 任务,等同于 atq。

-d:删除或取消一个任务
at -d 3
这个命令删除任务编号为 3at 任务。也可以使用 atrm 来实现相同功能。

-v:使用时间格式列出 at 任务
at -v
这个命令使用时间格式列出所有 at 任务,让你能看到任务预定执行的具体时间。

-c:列出任务之后的命令内容
at -c 3
这个命令列出任务编号为 3 的命令内容,即该任务将要执行的具体指令。

-f:从文件中读取命令
at -f script.sh 20:00
该命令将在晚上8点执行 script.sh 文件中的命令。

时间格式

参数 说明
HH:MM (AM/PM) 小时:分钟(最近的相应时间,即当天已过,则第二天执行)(默认以24小时制执行,在末尾添加AM/PM可转换为12小时制)
HH:MM YYYY-MM-DD 小时:分钟 年/月/日(在具体的某年某月的某一天的特殊时刻执行该工作)
now + n units 相对记时法:now:当前时间,n:数字,units(单位):(minutes、hours、days、weeks)
next 相对记时法的另一种表达方式

at注意事项

  • at命令只要指定的时间正确,就可以执行对应的命令
  • at命令的输出结果不会显示到屏幕上
  • at命令中执行的命令最好使用绝对路径,不容易报错
  • 过程:输入at 时间 -> 回车 ->输入执行的命令->ctrl+d退出at
  • at命令只会执行一次

at访问控制

at命令执行过程分析

  • 第一步:寻找/etc/at.allow (白名单)是否存在,写在该文件中用户才可执行at命令
  • 第二步:若/etc/at.allow不存在,则寻找/etc/at.deny(黑名单)文件,写在该文件中的用户不能使用at命令
  • 第三步:若两个文件都不存在则只有root用户可以使用at命令
  • 注意:若拒绝某用户使用at命令则可以将用户名写入到/etc/at.deny中