at命令介绍
at命令是一次性定时计划任务,at允许使用一套相当复杂的指定时间的方法。
- 它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。
- 它能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。
- 用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。
- 指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
需要注意的是,at命令定义的定时任务只会执行一次,如果需要循环执行的定时任务需要使用crontab命令。
atd服务启停
要想使用at命令,需要先启动atd服务,因为定时计划任务的执行,需要atd服务去/var/spool/at/目录下去找。该工作便能等待 atd 这个服务的取用与运行了。就这么简单
ps -aux | grep atd #查找atd服务是否开启
/etc/init.d/atd {start|stop|restart|condrestart|status}
#开启
/etc/init.d/atd start
#重新开启
/etc/init.d/atd restart
#关闭
/etc/init.d/atd stop
如果在/etc/init.d下面没有atd服务,那么使用以下命令
systemctl status atd #查看atd的状态
systemctl start atd #开启atd
systemctl stop atd #停止atd服务
systemctl enable atd #系统启动时自动启动
systemctl disable atd #系统启动时自动启动
命令的使用
#使用方法,现在命令行输入at + time
at time
at> echo 'Hello, World!'
at> <Ctrl+D>
at 命令支持多种时间格式:
- 指定具体时间:at 15:00
- 指定日期和时间:at 3pm tomorrow
- 指定特定日期:at 3pm Jul 25
- 相对时间:at now + 1 hour
在添加成功之后,可以通过atq命令查询
通过atrm job_id来删除定时计划任务
通过at -c job_id来展示需要执行的任务内容
使用实例
在两分钟之后执行date > ~/text.txt命令
date > ~/text.txt | at now + 2 minutes
在15:37执行 cd /home/myProject; make run >> text.txt
$ at 15:37
warning: commands will be executed using /bin/sh
at> cd /home/myProject
at> make run
at> <EOT>
job 12 at Thu Aug 8 15:37:00 2024
#特别注明:<EOT>是ctrl+D的快捷键
使用场景
- 延迟任务执行:适用于需要在未来某个时间点执行的任务,而不需要手动触发。例如,在办公时间结束后运行数据备份任务。
- 定时任务:可用于计划特定时间点的操作,如发送提醒邮件、生成报告等。
- 系统维护:用于安排系统维护任务,如重启服务、清理日志文件、执行系统更新等。
- 批处理任务:执行一次性的批处理任务,而无需创建复杂的定时脚本或使用cron作业。
参考链接
https://www.cnblogs.com/peida/archive/2013/01/05/2846152.html