用 Linux 的 at 命令来安排一个任务
创始人
2024-03-02 08:20:34
0

at 命令是一种在特定时间和日期安排一次性任务的 Linux 终端方法。

计算机擅长 自动化,但不是每个人都知道如何使自动化工作。不过,能够在特定的时间为电脑安排一个任务,然后忘记它,这确实是一种享受。也许你有一个文件要在特定的时间上传或下载,或者你需要处理一批还不存在但可以保证在某个时间存在的文件,或者需要监控设置,或者你只是需要一个友好的提醒,在下班回家的路上买上面包和黄油。

这就是 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> 
job 3 at Mon Jul 26 11:20:00 2021

正如你所看到的,at 使用直观和自然的时间定义。你不需要用 24 小时制的时钟,也不需要把时间翻译成 UTC 或特定的 ISO 格式。一般来说,你可以使用你自然想到的任何符号,如 noon1:30 PM13:37 等等,来描述你希望一个任务发生的时间。

等待几分钟,然后在你创建的文件上运行 cat 或者 tac 命令,验证你的任务是否已经运行:

$ cat ~/at-test.txt
hello world

用 at 安排一个任务

你不必使用 at 交互式提示符来安排任务。你可以使用 echoprintf 向它传送命令。在这个例子中,我使用了 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(午夜 00:00)
  • noon(中午 12:00)
  • teatime(下午 16 点)
  • AM(上午)
  • PM(下午)

时间和日期可以是绝对时间,也可以加一个加号(+),使其与 now 相对。当指定相对时间时,你可以使用你可能用过的词语:

  • 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

要看一个计划中的任务的实际内容,你需要查看 /var/spool/at 下的内容。只有 root 用户可以查看该目录的内容,所以你必须使用 sudo 来查看或 cat 任何任务的内容。

用 Linux at 安排任务

at 系统是一个很好的方法,可以避免忘记在一天中晚些时候运行一个作业,或者在你离开时让你的计算机为你运行一个作业。与 cron 不同的是,它不像 cron 那样要求任务必须从现在起一直按计划运行到永远,因此它的语法比 cron 简单得多。

等下次你有一个希望你的计算机记住并管理它的小任务,试试 at 命令。


via: https://opensource.com/article/21/8/linux-at-command

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

at

相关内容

Genspark 发布 G...
用 Al-Native 的方式,打造一款新时代的 Office。 ...
2026-08-03 20:10:44
阿里千问Qwen3.8大模...
每经编辑:叶峰 截至7月20日14时10分,人工智能板块表现活跃,...
2026-07-20 15:56:00
苹果macOS 27公测:...
苹果今日正式发布 macOS Golden Gate 首个公开测试...
2026-07-15 13:42:19
大行评级丨花旗:美团Lon...
花旗发表报告指,美团将万亿参数大模型LongCat-2.0正式开源...
2026-07-13 23:25:19
纳德拉炮轰AI巨头“双标”...
IT之家 7 月 13 日消息,微软 CEO 萨提亚 · 纳德拉(...
2026-07-13 15:59:10
主打“纯国产”:美团Lon...
7月6日,美团-W(03690.HK)正式开源新一代基础大模型Lo...
2026-07-09 23:06:19

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...