在 Linux 中使用“at”命令安排作业在 Linux 中使用“at”命令安排作业在 Linux 中使用“at”命令安排作业在 Linux 中使用“at”命令安排作业
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

在 Linux 中使用“at”命令安排作业

发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux 中的 at 命令可用于调度不定期运行的作业。了解如何使用 at 命令。

Linux 中的 at 命令可用于调度不定期运行的作业。

At 可以与 Linux 中的 Crontab 概念进行比较,它是自动化重复任务的更好方法。

在本教程中,我将展示如何使用“at 命令”来安排在将来的某个时间运行任务和命令。

在 Linux 中使用 at 命令安装

在开始之前,您应该检查系统上是否安装了“at”。并非所有操作系统都默认安装它。

您可以通过输入以下内容来检查:

at -V

如果软件已经安装,这将返回版本号。如果没有,可以通过键入以下命令将其安装在基于 Debian 的系统上:

sudo apt install at

如果您使用不同的 Linux 发行版,那么您可能需要修改此命令以反映您的发行版使用的包管理器。

入门

“at 实用程序”实际上是一系列协同工作来调度作业的命令。正如我已经提到的,当您的任务更像是“一次性”而不是重复事件的情况时,at 是首选。

我制作了一个表格,其中包含与 at 相关的一些基本命令。

at

允许用户安排任务

atq

列出登录用户或所有用户(如果以 sudo 身份运行)的排队作业

atrm

按指定作业编号删除作业

batch

指示系统仅在系统负载达到一定水平(平均负载<1.5)时才在指定时间运行作业

All Keybindings

[ ctrl+a ] + ?

在Linux中使用at命令来调度作业

使用 at 有其独特的格式。当您想要安排工作时,您将在终端中输入:

at [time] [date/day]

时间是必填项,但日期是可选的,如果不输入任何内容,则会根据当前日期和系统时间进行假设。

当您按回车键时,系统将提示您输入命令。您可以输入任意数量的内容。输入“ctrl+d”保存并退出。

让我用例子来给大家展示一下。

示例 1:使用自然语言输入时间/日期

您有许多不同的选项来输入时间。与 crontab 及其基于星号的系统有些棘手不同,“at”可以更有效地识别“人类”输入。

该软件可以理解许多类似人类的表达方式。其中很多都是特定于区域设置的。它可以识别“午夜”或“中午”等常见表达方式。它还可以区分 AM 和 PM。同样,它可以识别不同格式的日期和日期,包括缩写。

也可以使用“现在”这个表达方式。您只需输入如下命令,它就会在 5 分钟内运行该命令。

at now + 1 minutes
christopher@linux:~$ at now + 1 min
warning: commands will be executed using /bin/sh
at> echo "Look at you, using at like a champ!" > message.txt
at> <EOT>
job 8 at Mon Jan  6 02:59:00 2020

您很可能可以忽略有关 bin/sh 的警告。如果您使用不同的 shell,可能会引起头痛。绝大多数 Linux 发行版都附带 bash 作为系统 shell,符号链接为“sh”……这是一个很长的故事。

那么,大约有一分钟了,对吧?检查目录中是否有新文件。

您应该有一个名为“message.txt”的文件,其中包含我们的文本。

christopher@linux:~$ ls m*
message.txt

看起来不错,但它是否正确捕获了我们的信息?我们来看看文件的内容:

christopher@linux:~$ cat message.txt 
Look at you, using at like a champ!

示例 2:使用指定的时间/日期

对于您的第一份工作,您使用了“相对”时间“现在 + [时间]”。这是安排工作的一种非常简单的方法,但您可能需要更具体。

这次,我们在不同的时间安排 2 个作业。

您可以使用 message.txt 文件(在前面的示例中创建)进行演示。每个作业都会替换文件的内容。

您可以使用 date 命令检查 Linux 系统上的当前时间。

设置第一个作业的特定时间(从现在起 5 分钟):

christopher@linux:~$ at 3:45 
warning: commands will be executed using /bin/sh
at> echo "5 minutes later..." > message.txt
at> <EOT>
job 11 at Mon Jan  6 03:45:00 2020

设置第二个作业的特定时间(从现在起 10 分钟):

christopher@linux:~$ at 3:50
warning: commands will be executed using /bin/sh
at> echo "10 minutes later..." > message.txt    
at> <EOT>
job 12 at Mon Jan  6 03:50:00 2020

3:45 验证:

christopher@linux:~$ cat message.txt 
5 minutes later...

3:50 验证:

christopher@linux:~$ cat message.txt 
10 minutes later...

示例 3:使用 atq 查看所有排队作业

您可以随时使用 atq 命令检查计划的作业。它将列出登录用户当前计划的所有作业。要查看系统上的所有作业,您可能需要使用提升的权限。

christopher@linux:~$ atq
11    Mon Jan  6 03:45:00 2020 a christopher
12    Mon Jan  6 03:50:00 2020 a christopher

每个作业均由作业 ID、计划时间和关联用户来标识。

您还可以使用 -c 选项查看计划作业的内容:

at -c jobnumber

示例 4:使用 atrm 删除计划作业

如果您决定在执行作业之前取消作业,可以通过键入命令后跟相应的作业 ID(可以使用 atq 命令获取)来完成。

christopher@linux:~$ atrm 11
christopher@linux:~$ atq
12    Mon Jan  6 03:50:00 2020 a christopher

如您所见,作业 11 已从队列中删除。

示例 5:使用 at 命令的文件

也许您有一组想要不定期运行的脚本,而 cron 不适合。您可以在不使用标准输入的情况下输入多个作业。

让我们想象这样一个场景:人力资源部要求提供他们认为违反工作政策的员工的计算机活动文档。您可能希望某些活动日志或其他历史信息在指定时间为您生成报告。

您可以通过在文本文件中列出必要的脚本并使用 at 执行它们来节省时间。

christopher@linux:~$ cat problem_employee_logs.txt 
path/to/get_browsing_history.sh
/whatever/path/get_activity_logs.sh

你明白了。现在,您可以将 -f 添加到“at”命令中,并在后面包含文件名,如下所示:

christopher@linux:~$ at now + 2 minutes -f problem_employee_logs.txt 
warning: commands will be executed using /bin/sh
job 16 at Mon Jan  6 05:42:00 2020

示例 6:当 CPU 负载降至阈值以下时运行作业

默认情况下,当 CPU 平均负载低于 1.5 时,将运行批处理作业。

batch

输入批处理作业的方法与“at”相同,只是不需要指定时间。

如果要更改负载阈值,可以使用以下命令进行操作:

atd -l [n]

其中 n 是您想要选择的负载阈值。手册页建议您将其更改为高于 n-1,其中 n 是系统中的 CPU 数量。

结论

谢谢阅读。我希望您对 at 命令的理解有所提高。如果您有任何疑问或想分享如何使用此命令,请告诉我们!请在下面发表评论。

©2015-2025 Norria support@alaica.com