计算机擅长自动化,但并非每个人都知道如何使自动化工作。然而,能够安排计算机在特定时间执行任务,然后忘记它,真是一种奢侈。也许您需要在特定时间上传或下载文件,或者您需要处理一批尚不存在但保证在特定时间存在的文件,或者需要监控设置,或者您只是需要一个友好的提醒,在下班回家的路上买些面包和黄油。
这就是 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
时间和日期可以是绝对的,也可以添加加号 (+) 使它们相对于现在。指定相对时间时,您可以使用您可能已经使用的单词
minutes
hours
days
weeks
months
years
时间和日期语法
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 条评论