计算机擅长自动化,但并非每个人都知道如何使自动化工作。然而,能够安排计算机在特定时间执行任务,然后忘记它,真是一种奢侈。也许您需要在特定时间上传或下载文件,或者您需要处理一批尚不存在但保证在特定时间存在的文件或需要监控的设置,或者您可能只是需要一个友好的提醒,在下班回家的路上买些面包和黄油。
这就是 at
命令的用途。
什么是 Linux at 命令?
at
命令是 Linux 终端允许您为特定时间和日期安排一次性作业的方法。它是从终端轻松实现的自发自动化。
安装 at
在 Linux 上,at
命令可能已经安装。您可以使用 at -V
命令验证它是否已安装。只要返回版本号,您就安装了 at
$ at -V
at version x.y.z
如果您尝试使用 at
但找不到该命令,则大多数现代 Linux 发行版都会为您提供安装缺少的 at
软件包的选项。
您可能还需要启动 at 守护程序,称为 atd
。在大多数 Linux 系统上,您可以使用 systemctl 命令来启用服务并设置它们从现在开始自动启动
$ sudo systemctl enable --now atd
使用 at 交互式调度作业
当您将 at
命令与您希望任务运行的时间一起使用时,您将打开一个交互式 at
提示符。您可以输入您希望在指定时间运行的命令。
如果这有帮助,您可以将此过程视为日历应用程序,就像您可能在手机上使用的应用程序一样——首先,您在某天的某个时间创建一个事件,然后您指定您希望发生什么。
例如,尝试通过在未来几分钟内创建一个任务来为自己安排一个备忘录。使任务简单以减少失败的可能性。要退出 at
提示符,请按键盘上的 Ctrl+D。
$ at 11:20 AM
warning: commands will be executed using /bin/sh
at> echo "hello world" > ~/at-test.txt
at> <EOT>
job 3 at Mon Jul 26 11:20:00 2021
如您所见,at
使用直观且自然的时间定义。您不需要知道 24 小时制时钟或将时间转换为 UTC 或特定的 ISO 格式。通常,您可以使用您认为自然的任何表示法,例如中午、下午 1:30、13:37 等,来描述您希望任务发生的时间。
等待几分钟,然后通过对您创建的文件运行 cat
或 tac
命令来验证您的任务是否已运行
$ cat ~/at-test.txt
hello world
使用 at 调度作业
您不必使用交互式提示符来使用 at
调度作业。您可以改为使用 echo
或 printf
将命令管道传输到它。在此示例中,我使用 now 表示法以及我希望任务延迟多少分钟
$ echo "echo 'hello again' >> ~/at-test.txt" | at now +1 minute
一分钟后,验证新命令是否已执行
$ cat ~/at-test.txt
hello world
hello again
时间表达式
at
命令在解释时间时非常宽容。您可以根据哪个最方便选择多种格式
YYMMDDhhmm
[.ss]
(缩写年份、月份、日期、小时、分钟,以及可选的秒)CCYYMMDDhhmm
[.ss]
(完整年份、月份、日期、小时、分钟,以及可选的秒)now
midnight
noon
teatime
(下午 4 点)AM
PM
时间和日期可以是绝对的,也可以添加加号 (+) 使其相对于现在。在指定相对时间时,您可以使用您可能已经使用的单词
分钟
小时
天
周
月
年
时间和日期语法
at
命令在区分时间和日期方面不太宽容。时间必须在先,其次是日期,尽管日期默认为当前日期,并且仅在为将来的某一天安排任务时才需要。
以下是一些有效表达式的示例
$ echo "rsync -av /home/tux me@myserver:/home/tux/" | at 3:30 AM tomorrow
$ echo "/opt/batch.sh ~/Pictures" | at 3:30 AM 08/01/2022
$ echo "echo hello" | at now + 3 days
查看您的 at 队列
一旦您接受了 at
并开始调度任务,而不是在办公桌周围散落的纸片上乱写笔记,您可能需要查看您的队列中是否还有作业。
要查看您的 at
队列,请使用 atq
命令
$ atq
10 Thu Jul 29 12:19:00 2021 a tux
9 Tue Jul 27 03:30:00 2021 a tux
7 Tue Jul 27 00:00:00 2021 a tux
要从队列中删除任务,请使用 atrm
命令以及作业编号。例如,要删除作业 7
$ atrm 7
$ atq
10 Thu Jul 29 12:19:00 2021 a tux
9 Tue Jul 27 03:30:00 2021 a tux
要查看计划作业中实际包含的内容,您必须查看 at
后台处理程序。只有 root 用户才能查看 at
后台处理程序,因此您必须使用 sudo
才能查看后台处理程序或 cat
任何作业的内容。
使用 Linux at 调度
at
系统是避免忘记在当天晚些时候运行作业或让您的计算机在您离开时为您运行作业的绝佳方法。与 cron
不同,它不受作业必须从现在到永远按计划定期运行的期望的限制,因此它的语法比 cron
语法简单得多。
下次您有希望计算机记住和管理的小型作业时,请尝试使用 at
命令。
4 条评论