Linux at 命令语法详解

662 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

at命令用于一次性定时计划任务,使用at可以在特定时间执行命令,用at创建的作业仅执行一次。接下来我们将介绍一下at命令的使用方法。

安装at服务

可以使用yum install at或者apt install at进行安装。

使用at命令

语法格式

at [选项] runtime

常用选项如下:

  • -f:指定包含具体指令的任务文件
  • -q:指定新任务的队列名称
  • -l:显示待执行任务的列表
  • -d:删除指定的待执行任务
  • -m:任务执行完成后向用户发送e-mail

指定执行时间

  • 指定时间,使用HH:MM(小时:分钟)形式。若要指示12小时制,在时间后使用am(上午)或pm(下午)即可。您还可以使用nowmidnight(深夜 0点),noon(中午 12点)或teatime(饮茶时间,一般指16点)之类的字符串。如果过了指定的时间,则作业将在第二天执行。

  • 指定日期,格式为month day(月 日)、mm/dd/yy(月/日/年)、dd.mm.yy(日.月.年)等,指定的日期必须跟在指定时间的后面。也可以使用例如todaytomorrow等。

  • 增量,at也接受以now + count time-unit格式递增,其中count是数字,time-unit可以是以下字符串之一:minuteshoursdaysweeks

例如:

从现在起两天后的下午1点执行任务:

at 1pm + 2 days

2021年10月31日14点执行任务:

at 14:00 10/31/21

从现在开始一小时后执行任务:

at now + 1 hours

实例

两天后的上午10点执行mkdir at_test命令:

[root@centos7 ~]# at 10am + 2 days
at> mkdir at_test
at> <EOT>
job 1 at Sun Oct 17 10:00:00 2021
[root@centos7 ~]#

明天13:30执行输出日期到指定文件:

at 13:30 tomorrow
at> date > ./date.log
at> <EOT>
job 2 at Sat Oct 16 13:30:00 2021
[root@centos7 ~]#

注意: 执行at命令时,系统会显示以at>开命令提示符,需要输入要执行的一个或多个命令,例如mkdir at_test,完成输入命令后,按Ctrl+D退出提示并保存作业,将会显示作业编号以及执行时间和日期。

计划任务设定后,在没有执行之前我们可以用atq命令或者at -l来查看系统待处理的工作任务:

[root@centos7 ~]# atq
1       Sun Oct 17 10:00:00 2021 a root
2       Sat Oct 16 13:30:00 2021 a root
[root@centos7 ~]# at -l
1       Sun Oct 17 10:00:00 2021 a root
2       Sat Oct 16 13:30:00 2021 a root

每行包括作业编号、日期及时间、队列字母和用户名。

使用atrm命令或者at -d命令可以删除未执行的任务:

atrm 2
[root@centos7 ~]# at -l
1       Sun Oct 17 10:00:00 2021 a root

使用at -c命令可以查看任务的内容:

[root@centos7 ~]# at -c 1
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=24; export XDG_SESSION_ID
HOSTNAME=centos7; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
···
${SHELL:-/bin/sh} << 'marcinDELIMITER5e7044d9'
mkdir at_test

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !