简介
at命令是linux另一个常用的定时任务命令。和crontab不同,crontab是循环执行,每过指定时间段就会执行一次,像闹钟。at命令是到指定的时间点执行一次,只执行一次,像记事本,事做完了就没用了。
详解
查看帮助文档
代码语言:javascript复制┌──(root㉿kali)-[~/Desktop]
└─# at -h
Usage: at [-V] [-q x] [-f file] [-u username] [-mMlbv] timespec ...
at [-V] [-q x] [-f file] [-u username] [-mMlbv] -t time
at -c job ...
at [-V] -l [-o timeformat] [job ...]
atq [-V] [-q x] [-o timeformat] [job ...]
at [ -rd ] job ...
atrm [-V] job ...
batch
Bash
除了at命令,还附带了atq、atrm、batch命令。
参数详解
-d | 删除系统中的等待作业(等效于atrm命令) |
---|---|
-c | 打印任务的内容 |
-q | 使用指定的列队 |
-f | 将指定文件提交等待作业(脚本文件,以行解析,每行都是一个定时任务) |
-t | 以时间的形式提交运行作业 |
atq | 查看当前的任务列表 |
batch | 当负荷平均下降到低于0.8时执行命令(相当于指定时间参数的at命令) |
时间格式
HH:MM | 比如04:00代表4:00AM。如果时间过去,会变成在第二天此时 |
---|---|
Midnight | 代表12:00AM |
Noon | 代表12:00PM |
Teatime | 代表4:00PM |
英文 月 日期 年份 | 比如'October 08 2022',代表2022年十月八日 |
MMDDYY、MM/DD/YY、MM.DD.YY | 比如'100822',代表2022年十月八日 |
now 数字 时间单位 | 时间单位:min、hour、day、week。比如'now 10 min',代表从现在开始十分钟后执行 |
注意:在使用at命令时可以指定Midnight、Noon和Teatime时间参数,也可以指定midnight、noon和teatime时间参数。也就是说这三个时间参数的第一个字母可以大写也可以小写,都能使用。
实例
代码语言:javascript复制┌──(root㉿kali)-[~/Desktop]
└─# at now 10 min #at 指定时间 ,进入at命令交互
warning: commands will be executed using /bin/sh
at Sat Oct 8 09:09:00 2022
at> ls > ll.txt #输入定时任务(ls > ll.txt),按 enter 结束
at> <EOT> #按 ctrl d ,退出at命令交互
job 8 at Sat Oct 8 09:09:00 2022
┌──(root㉿kali)-[~/Desktop]
└─# atq #查询定时任务,(8)是任务编号
8 Sat Oct 8 09:09:00 2022 a root
┌──(root㉿kali)-[~/Desktop]
└─# at -c 8 #显示定时任务的内容,在输出内容末尾,中间省略大部无用内容
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
省略号
ls > ll.txt
┌──(root㉿kali)-[~/Desktop]
└─# atrm 8 #删除指定编号的定时任务
┌──(root㉿kali)-[~/Desktop]
└─# atq #查询定时任务,发现已经删除
Bash
代码语言:javascript复制┌──(root㉿kali)-[~/Desktop]
└─# batch #batch和at一样,交互也是以at开头,操作也一样,只是batch的触发条件不是时间,是负荷平均下降到低于0.8时执行命令
warning: commands will be executed using /bin/sh
at Sat Oct 8 09:08:00 2022
at> ls > ll.txt
at> <EOT>
job 9 at Sat Oct 8 09:08:00 2022
Bash
代码语言:javascript复制┌──(root㉿kali)-[~/Desktop]
└─# touch at.sh #创建at.sh脚本文件
┌──(root㉿kali)-[~/Desktop]
└─# echo '#!/bin/sh' > at.sh && echo 'ls > ll.txt' >>at.sh #向脚本写入内容
┌──(root㉿kali)-[~/Desktop]
└─# cat at.sh #输出脚本文件内容
#!/bin/sh
ls > ll.txt
┌──(root㉿kali)-[~/Desktop]
└─# at -f at.sh 10/08/2023 #定时2023年10月8日执行脚本文件
warning: commands will be executed using /bin/sh #输出提示:脚本将以/bin/sh执行
job 17 at Sun Oct 8 09:21:00 2023
┌──(root㉿kali)-[~/Desktop]
└─# atq #查询定时任务
17 Sun Oct 8 09:21:00 2023 a root
┌──(root㉿kali)-[~/Desktop]
└─# at -c 17 #显示定时任务内容
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
省略号
#!/bin/sh
ls > ll.txt
Bash
用户设置
用户可以使用 at 命令设置一次性计划任务,那么也可以控制哪些用户可以使用计划任务(在白名单中),哪些用户不可以使用计划任务 at 一次性计划任务的白名单是 at.allow(/etc/at.allow) ,黑名单是 at.deny(/etc/at.deny)。
结束语
注意:脚本是以/bin/sh执行,所以得是shell脚本。 若有帮助收藏一下本站吧,一起学习进步赚高薪。