用 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

相关内容

AI“伤害”人类的证据出现...
美国麻省理工学院发布的研究结果显示,聊天生成预训练转换器(Chat...
2025-08-23 13:17:50
开源版Genie 3世界模...
机器之心报道 作者:泽南、杨文 国产开源版 Genie 3 问...
2025-08-19 11:12:44
免费人工智能免费网址:这些...
嘿,你是不是也经常刷到各种AI神器,但一看价格就退缩了?别担心,今...
2025-08-17 10:12:49
2025重塑AI宇宙 | ...
编者注:蒋宇捷(@jiangyujie),信天创投管理合伙人,专注...
2025-08-17 08:16:44
美国不甘落后!启动ATOM...
快科技8月6日消息,据报道,面对中国在开源人工智能(AI)领域的迅...
2025-08-06 19:41:28
科研写作神器,超越Math...
LaTeX 公式的光学字符识别(OCR)是科学文献数字化与智能处理...
2025-08-05 18:14:57

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...