太多场景需要使用定时任务,在特定时间执行一次,自动完成设定的任务。
与cron命令不一样,at不需要让任务从现在开始一直循环运行。
语法简洁。
大部分Linux发行版已经安装at命令,可以使用at -V查看
未安装时进行yum install at
#启动atd
systemctl start atd
#设置开机自启
systemctl enable atd
at [选项] [日期时间]
选项
-f 制定包含具体指令的任务文件
-q 指定新任务的队列名称
-l 显示待执行任务的列表
-d 删除指定的待执行任务
-m 任务执行完成后向用户发送E-mail
参数
日期时间:指定任务执行的日期时间
at命令中时间可以用1:30 PM,13:37,now +数字等格式
now +数字 时间单位,是从现在开始,x单位后执行,单位可以是minutes, hours, days, weeks
例子:
at 5 PM +3 days
at 18:00 tomorrow
时间表达式
CC指定年份的前两位数字
YY指定年份的后两位数字
MM指定一年的哪一个月,01-12
DD指定一月中哪一天,01-31
hh指定一天中哪一小时,00-23
mm指定一小时中哪一分钟,00-59
ss指定一分钟哪一秒,00-59
YYMMDDhhmm[.ss] (缩写年、月、日、小时、分钟[秒])
[[CC]YY]MMDDhhmm[.ss] (完整年、月、日、小时、分钟和[秒])
now
midnight
noon
teatime(下午4点)
AM
PM
时间和日期可以是绝对的,也可以添加一个加号+,让执行时间相对于现在。
now相对时间下,可以用以下指定单位
minutes
hours
days
weeks
months
years
输入at,然后加上具体时间,进入交互模式,设置完成后,按ctrl+d进行退出保存。
使用管道符或printf将值传递给at
echo “echo ‘how to use at’ > /root/he.txt “ | at now +1 minute
查看at队列
atq
删除任务
at -d 任务号
atrm 任务号
查看任务内容
at -c 任务号
/usr/share/doc/at-3.1.13/timespec
背景:
该文件以yacc语法进行编写。yacc(Yet AnotherCompilerCompiler)是一个经典的生成语法分析器的工具,需要搭配词法分析器使用,通常交互是语法分析器调用词法分析器来实现的。
yacc的基本规范:包含三部分,定义段,规则段,用户子例程段
…定义段…
%%
…规则段…
%%
…用户子例程段…
备注:前两部分必须,但定义段可以是空的,用户子例程段和前面%可以省略
token是基本项,是声明
规则段格式
A : BODY;
截取的部分时间定义
默认情况存放在/var/spool/at/这个文件下
root用户可以使用at命令,其他用户使用at的权限在/etc/at.allow【定义可以使用计划任务的用户】和/etc/at.deny【定义不能使用计划任务的用户】文件中
权限判定优先级:
/etc/at.allow优先级高于/etc/at.deny
权限判定顺序:
/etc/at.allow文件存在时,只有该文件中用户名对应用户才能使用at;不存在时,/etc/at.deny存在,不在at.deny中的用户都可以使用at
如果at.allow和at.deny文件都不存在,只有root能使用at
at.deny文件默认为空,表示任何用户都可以使用at命令。
一般情况,两个文件存在一个即可,可以自己创建。
只有几个用户使用at时,保留at.allow,大部分都要用at时,保留at.dent