【奇技淫巧】Linux | 时光之主-延迟执行at

802 阅读2分钟

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

上文有讲到date命令,使用它我们可以查看当前时间,定制化时间的显示,以及修改系统时间。这篇文章我们要讲到延时执行命令at,我们可以使用这个命令设置一个命令延时执行的时间。

一、环境准备

不是所有的Linux发行版都支持使用at命令。

如果你使用的是Ubuntu,请使用以下的命令行安装此命令。

$sudo apt install at

如果你使用的是Centos,请使用以下的命令行安装此命令。

#反查所需的依赖包,获取at的版本
$yum provides at
​
#安装
$yum install -y <at with version>
​

检查是否安装可正常使用!

at 14:30

控制台输出结果为:

1.png

终端上有一个warning的提示,意思是让你提供要在14:30要执行的命令,这就表示at命令安装成功了。

二、使用

2.1 基础使用

入门

如果我们想要在指定时间创建文件,可以按照图示的方法输入创建文件的命令。

2.png

现在延迟执行的命令已经输入完成,需要退出并保存设置,可以使用crtl+D组合键完成退出,首先会显示EOF,这个缩写代表End Of Transmission(传输结束),退出完成,终端会输出以下图示内容。

3.png 内容表达的含义如下:

  • job - 表示创建了一个任务
  • 3 - 表示第3号任务
  • at - 表示“在...时刻”
  • Sat Sep 25 14:32:00 2021 - 表示命令具体执行的时间,精确到秒

时间到了约定的时间,就会去执行具体的命令。检查文件目录,的确成功执行。

4.png

完整用法

明天14:32执行命令

$ at 14:32 tomorrow

2021年9月27日14:32执行命令

$ at 14:32 09/27/2021

时间间隔后执行

除了指定时刻,还能指定时间间隔后执行。

# 30分钟后执行命令
$ at now +30 minutes

间隔时间单位包含 minutes hours days weeks months years

2.2 管理查看功能

延迟命令执行后,它就会成为一个任务,等待设置的时间一到就执行,那么如何管理查看这些延时任务呢?

很简单,每次设置延迟执行的命令后,会得到一个job编号,我们基于这个编号可以管理这些任务。

atq命令

atq命令可列出正等待执行的at延迟任务,q表示英语单词queue,即队列,表示列出at命令的任务队列,使用方法如图所示。

5.png

atrm

atrm命令可删除正在等待执行的at延迟任务,rm表示英语单词remove,命令后接job编号,使用方法如图所示。

6.png

图上延迟执行的任务被删除,因此就不会再被执行了。

三、扩展

通过上面的使用,at命令确实达到了延迟执行命令的效果,但是需要注意的是,at命令只能让需要延迟执行的程序只执行一次,如果要达到定时重复执行的效果,请使用另一个强大的命令crontab