简介

at命令是linux另一个常用的定时任务命令。和crontab不同,crontab是循环执行,每过指定时间段就会执行一次,像闹钟。at命令是到指定的时间点执行一次,只执行一次,像记事本,事做完了就没用了。

详解

查看帮助文档

┌──(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

除了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时间参数。也就是说这三个时间参数的第一个字母可以大写也可以小写,都能使用。

实例

┌──(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        #查询定时任务,发现已经删除
┌──(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
┌──(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

用户设置

用户可以使用 at 命令设置一次性计划任务,那么也可以控制哪些用户可以使用计划任务(在白名单中),哪些用户不可以使用计划任务
at 一次性计划任务的白名单是 at.allow(/etc/at.allow) ,黑名单是 at.deny(/etc/at.deny)。

结束语

注意:脚本是以/bin/sh执行,所以得是shell脚本。
若有帮助收藏一下本站吧,一起学习进步赚高薪。