Linux at命令详解:定时执行任务

在 Linux 系统中,查看 at 软件包是否已安装,可以使用 rpm -q 命令,如下所示:

root@localhost \~# rpm -q at

at-3.1.13-20.el7x86_64

当前系统已经安装 at 软件包,若所用系统未安装,可使用如下命令进行安装

root@localhost \~# yum -y install at

#省略输出信息,最终出现 Complete!,证明安装成功。

除此之外,at 命令要想正确执行,还需要 atd 服务的支持。atd 服务是独立的服务,启动的命令如下:

root@localhost \~# service atd start

正在启动 atd: 确定

如果想让 atd 服务开机时自启动,则可以使用如下命令:

root@localhost \~# chkconfig atd on

独立服务的自启动也可以修改 /etc/rc.local 配置文件

安装好 at 软件包并开启 atd 服务之后,at 命令才可以正常使用,另外可以了解一下at命令访问控制,访问控制指的是允许哪些用户使用 at 命令设定定时任务,或者不允许哪些用户使用 at 命令。

at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:

  • 如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。
  • 如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
  • 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。

系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可。

/etc/at.allow 文件的优先级更高,如果 /etc/at.allow 文件存在,则 /etc/at.deny 文件失效。

/etc/at.allow 文件的管理更加严格,因为只有写入这个文件的用户才能使用 at 命令,如果需要禁用 at 命令的用户较多,则可以把少数用户写入这个文件。/etc/at.deny 文件的管理较为松散,如果允许使用 at 命令的用户较多,则可以把禁用的用户写入这个文件。不过这两个文件都不能对 root 用户生效。

at 命令,基本格式如下

root@localhost \~\] # at \[选项\] \[时间

选项 含义
-m 当 at 工作完成后,无论命令是否输出,都用 E-mail 通知执行 at 命令的用户。
-c 工作标识号 显示该 at 工作的实际内容。
-t 时间 在指定时间提交工作并执行,时间格式为 \[CCYY]MMDDhhmm。
-d 删除某个工作,需要提供相应的工作标识号(ID),同 atrm 命令的作用相同。
-l 列出当前所有等待运行的工作,和 atq 命令具有相同的额作用。
-f 脚本文件 指定所要提交的脚本文件。
[at 命令选项及含义]
格式 用法
HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。
Midnight(midnight) 代表 12:00 AM(也就是 00:00)。
Noon(noon) 代表 12:00 PM(相当于 12:00)。
Teatime(teatime) 代表 4:00 PM(相当于 16:00)。
英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。
MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号。
now+时间 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。
[at 命令时间参数可用格式]

at 命令只要指定正确的时间,就可以输入需要在指定时间执行的命令。这个命令可以是系统命令,也可以是 Shell 脚本。 示例:

coot@localhost \~# cat /root/hello.sh

#!/bin/bash

echo "hello world!!"

#该脚本会打印"hello world!!"

root@localhost \~# at now +2 minutes

at> /root/hello.sh >> /root/hello.log

#执行hello.sh脚本,并把输出写入/root/hello.log文件

at> <EOT>

#使用Ctrl+D快捷键保存at任务

job 8 at 2013-07-25 20:54 #这是第8个at任务,会在2013年7月25日20:54执行

root@localhost \~# at -c 8

#查询第8个at任务的内容

...省略部分内容...

#主要定义系统的环境变量

/root/hello.sh >> /root/hello.log

#可以看到at执行的任务

[root@localhost ~J# at 02:00 2013-07-26

at> /bin/sync

at> /sbin/shutdown -h now

at> <EOT>

job 9 at 2013-07-26 02:00

#在指定的时间关机。在一个at任务中是可以执行多个系统命令的

在使用系统定时任务时,不论执行的是系统命令还是 Shell 脚本,最好使用绝对路径来写命令,这样不容易报错。at 任务一旦使用 Ctrl+D 快捷键保存,实际上写入了 /var/spool/at/ 这个目录,这个目录内的文件可以直接被 atd 服务调用和执行。

相关推荐
kloc4 小时前
聊天室项目入口网关子服务的实现
linux·c++
GeW4 小时前
深圳APEC峰会倒计时:数据库与Linux运维的"隐形考场"
linux
梦到啥说啥5 小时前
Linux网络编程:UDP网络协议
linux·网络协议·udp
无足鸟ICT6 小时前
【RHCA+】ipcrm命令(删除IPC资源)
linux
星恒随风7 小时前
MySQL 从零入门(四):表的增删改查与基础查询详解
linux·服务器·数据库·笔记·mysql
Z21-X8 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
陈希12310 小时前
Linux 网络诊断工具实战:ping、curl、tcpdump、mtr、dig 用法详解
linux·网络·tcpdump
进击的荆棘10 小时前
Linux系统——线程同步与互斥之线程池和安全
linux·运维·服务器·安全·单例模式·线程
刘大望10 小时前
不用买开发板:用 QEMU 走通嵌入式 Linux 全流程(三)存储与网络实地验证
linux·qemu·嵌入式linux·alpine
蜗牛一步步往上爬11 小时前
第六章 BMC常用的调试工具
服务器