1

Linux at命令详解

 2 years ago
source link: https://segmentfault.com/a/1190000040885631
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

大家好,我是良许。

生活中,我们有太多场景需要使用到闹钟,比如早上 7 点起床,下午 4 点开会,晚上 8 点购物,等等。

在 Linux 系统里,我们同样也有类似的需求。比如我们想在凌晨 1 点将文件上传服务器,或者在晚上 10 点确认系统状态,等等。

但我们不可能一直守在电脑前,毕竟我们也需要下班/睡觉,还要陪女朋友(new一个也行)。而且即使在上班期间,如果到点了还需要人工操作,未免效率太低了。

at 命令就是为这个需求而诞生的。使用 at 命令,你可以在特定时间自动完成你所设定的任务,也可以实现自动化,非常方便快捷!

安装 at 命令

一般来讲,大部分 Linux 发行版都已经安装了 at 命令,不确定的话可以使用 at -V 命令查看,如果有版本返回,说明就可以正常使用 at 命令。

$ at -V
at version 3.1.13

你可能还需要启动 at 守护进程,称为 atd 。 在大多数 Linux 系统上,你可以使用 systemctl 命令启用 atd 服务并将它们设置为从现在开始自动启动:

$ sudo systemctl enable --now atd

at 命令基本用法

  • 语法
at [选项] [日期时间]
  • 选项
-f:指定包含具体指令的任务文件
-q:指定新任务的队列名称
-l:显示待执行任务的列表
-d:删除指定的待执行任务
-m:任务执行完成后向用户发送 E-mail
  • 参数
日期时间:指定任务执行的日期时间

使用 at 命令交互性安排任务

想想看,我们平时是怎么使用闹钟这个工具的?首先我们点击闹钟软件上的加号,然后再设定时间,再在备注里输入闹钟的目的。

使用 at 命令交互性安排任务也是一样的道理。首先你输入 at 命令,然后再跟上具体的时间。

回车之后就进入到交互性界面,你再具体输入要做的事情(命令),最后以 <EOT> 结束输入,任务就设置好了。

例如,你想在早上 11:20 的时候,在 at-test.txt 文档里写入 hello world 这句话,可以这样交互性输入:

$ 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 格式。通常,可以直接使用我们生活中常用的单词它就能理解,例如noon1:30 PM13:37等。

在 11:20 过后,你可以使用 cat 命令检查一下 at-test.txt 文件是否有内容写入:

$ cat ~/at-test.txt
hello world

使用 at 命令安排任务

如果你不想使用交互的方式来给 at 命令安排任务,可以使用管道将 echoprintf 的值传递给 at 命令。

比如,我想从现在开始一分钟后向 at-test.txt 文件写入 hello again 语句:

$ echo "echo 'hello again' >> ~/at-test.txt" | at now +1 minute

一分钟后,验证新命令是否已执行:

$ cat ~/at-test.txt
hello world
hello again

时间表达式

前面提到过,at 命令使用的是我们日常生活中所使用的时间格式,非常方便:

  • YYMMDDhhmm[.ss]
    (缩写年、月、日、小时、分钟[秒])
  • CCYYMMDDhhmm[.ss]
    (完整年、月、日、小时、分钟和[秒])
  • midnight
  • teatime`(下午4点)

时间和日期可以是绝对的,也可以添加一个加号 ( + ) 使它们相对于现在。在指定相对时间时,下面这些日常生活中所使用的词汇都可以使用:

  • minutes
  • hours
  • 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 命令队列时设置了多少个任务,如果你想进行查看,可以使用 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 spool 。只有 root 用户才能查看at spool,因此你必须使用 sudo 来查看 spoolcat 任务的内容。

at 命令是避免忘记在将来特定时间的任务或在你离开时让计算机为你运行任务的非常好的方式。与 cron 命令不一样的是,它不需要使任务从现在一直循环运行,因此它的语法比 cron 简单得多。

下次你想在下班后让系统为你做个工作,可以试试 at 命令。


最后,最近很多小伙伴找我要Linux学习路线图,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。无论你是面试还是自我提升,相信都会对你有帮助!

免费送给大家,只求大家金指给我点个赞!

电子书 | Linux开发学习路线图

也希望有小伙伴能加入我,把这份电子书做得更完美!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK