使用 at 命令在 Linux 上安排任务

at 命令可以很容易地安排 Linux 任务在你选择的任何时间或日期运行,让我们来看看它能为你做什么。

-- Sandra Henry-stocker

当你希望命令或脚本在某个特定时间运行时,你不需要将手指放在键盘上盘旋等待按下回车键,或者是在特定时间坐在办公桌前。相反,你可以通过at命令来设置任务。在本文中,我们将研究如何使用at来安排任务,如何精确地选择任务希望运行的时间,以及如何使用at来查看安排运行的任务。

at vs cron

对于那些使用 cron 在 Linux 系统上安排任务的人来说,at命令类似于 cron,因为你可以在选定的时间调度任务,但是 cron 用于定期运行的作业 —— 甚至是每年仅一次。大多数 cron 作业的频率都设置为每天、每周或每月运行一次,不过你可以控制运行的频率和时间。

另一方面,at命令用于仅运行一次的任务。想在午夜重启系统?没问题,只要你有适当的权限,at可以为你完成此操作。如果你希望系统在每个星期六凌晨 2 点重启,那么改用 cron。

使用 at

at

命令很容易使用,只需记住几件事。一个简单使用at的例子类似于这样:

$ at 5:00PM

at> date >> thisfile

at>

在输入at和应该运行命令的时间,at会提示你在设定时间会运行该命令(此例中是date命令)。输入^D(Ctrl + d)来完成请求。

假设我们在下午 5 点之前设置这个at命令,那么这个日期和时间将在当天下午 5 点添加到名为thisfile文件的末尾。否则,该命令将在第二天下午 5 点运行。

与at命令进行交互时,可以输入多个命令。如果你要同时运行多个命令,只需输入多个命令行即可:

$ at 6:22

warning: commands will be executed using /bin/sh

at> echo first >> thisfile

at> echo second >> thisfile

at>

在上面的命令中,我们使用了一个普通的用户账户,将一些简单的文本添加到该用户主目录的文件中。如果在上午 6:22 之后运行这些命令,那么命令会在第二天运行,因为 6:22 表示上午 6:22。如果你想在下午 6:22 运行,使用6:22 PM或者18:22。6:22 PM这样也是可以工作的。

你也可以通过使用at来安排命令在指定的日期或时间运行,例如10:00AM April 15 2021或noon + 5 days(从今天起 5 天内的中午运行),以下是一些例子:

at 6PM tomorrow

at noon April 15 2021

at noon + 5 days

at 9:15 + 1000 days

在指定要运行的命令并按下^D后,你会注意到at命令为每个请求分配了一个作业编号,这个数字将显示在at命令的作业队列中。

$ at noon + 1000 days

warning: commands will be executed using /bin/sh

at> date >> thisfile

at>

job 36 at Tue Dec 27 12:00:00 2022

检查队列

你可以使用atq(at queue)命令来查看at作业队列:

$ atq

32 Thu Apr 2 03:06:00 2020 a shs

35 Mon Apr 6 12:00:00 2020 a shs

36 Tue Dec 27 12:00:00 2022 a shs

34 Thu Apr 2 18:00:00 2020 a shs

如果你需要取消队列中的一个作业,使用atrm(at remove)命令和作业编号:

$ atrm 32

$ atq

35 Mon Apr 6 12:00:00 2020 a shs

36 Tue Dec 27 12:00:00 2022 a shs

34 Thu Apr 2 18:00:00 2020 a shs

你可以使用at -c命令来查看安排任务的详细信息,其它详细信息(活动的搜索路径等)也可以看到,但是输出的最后一行将显示计划运行的命令。

$ at -c 36 | tail -6

cd /home/shs || {

echo 'Execution directory inaccessible' >&2

exit 1

}

date >> thisfile

注意,该命令显示首先会测试是否可以通过cd命令进入用户目录。如果不可以,作业将退出并显示错误。如果可以,则运行在at中指定的命令。它将命令视为 “进入/home/shs或退出并显示错误”。

以 root 身份运行作业

要以 root 身份运行at作业,只需将sudo与你的at命令一起使用,如下所示:

$ sudo at 8PM

[sudo] password for shs:

warning: commands will be executed using /bin/sh

at> reboot now

at>

job 37 at Wed Apr 1 16:00:00 2020

注意,root 的任务以root作为执行者显示在队列中。

35 Mon Apr 6 12:00:00 2020 a shs

36 Tue Dec 27 12:00:00 2022 a shs

37 Wed Apr 1 20:00:00 2020 a root

运行脚本

你还可以使用at命令来运行脚本,这里有一个例子:

$ at 4:30PM

warning: commands will be executed using /bin/sh

at> bin/tryme

at>

禁止使用 at 命令

/etc/at.deny文件提供了一种禁止用户使用at命令的方法。默认情况下,它可能会包含一个不允许的账户列表,例如ftp和nobody。可以使用/etc/at.allow文件执行相反的操作,但是通常只配置at.deny文件。

总结

当你要安排一项一次性任务时,无论你是希望在今天下午或几年后运行,at命令都是通用且易于使用的。

via:https://www.networkworld.com/article/3535808/scheduling-tasks-on-linux-using-the-at-command.html

作者:Sandra Henry-Stocker选题:lujun9972译者:MjSeven校对:wxy

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200410A05NA500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券