Linux中的命令

at 是一个命令行实用程序,可让您安排在特定时间执行的命令。 创造的工作 at 只执行一次。

在本文中,我们将说明如何使用 at 及其配套工具 batchatqatrm 查看,删除和创建要在以后执行的作业。

正在安装 at

根据分布, at Linux系统上可能存在或可能不存在。

如果 at 未安装,则可以使用发行版的软件包管理器轻松安装。

  • 安装 at 在Ubuntu和Debian上

    sudo apt update sudo apt install at
  • 安装 at 在CentOS和Fedora上

    sudo yum install at

安装程序后,请确保 atd,调度守护程序正在运行,并设置为在启动时启动:

sudo systemctl enable --now atd

如何使用 at 命令#

的简化语法 at 命令如下:

at [OPTION...] runtime

at 命令采用日期和时间(runtime),当您要将作业作为命令行参数执行时,以及要从标准输入执行的命令。

让我们创建一个将在上午9:00执行的作业:

at 09:00

一旦你打 Enter,您将会看到 at 通常以以下命令开头的命令提示符 at>。 您还会看到一条警告,告知您将在其中运行命令的shell:

warning: commands will be executed using /bin/sh
at>

输入您要执行的一个或多个命令:

tar -xf /home/linuxize/file.tar.gz

输入命令完成后,按 Ctrl-D 退出提示并保存作业:

at> <EOT>
job 4 at Tue May  5 09:00:00 2020

该命令将显示作业编号以及执行时间和日期。

除了在命令行中输入命令外,还有其他方法可以传递您要运行的命令。 at 提示。 一种方法是使用 echo 并将命令传递给 at

echo "command_to_be_run" | at 09:00

另一种选择是使用Here文档:

at 09:00 <<ENDcommand_to_be_runEND

要从文件而不是标准输入中读取命令,请使用 -f 选项,然后是文件的路径。 例如,创建一个将运行脚本的作业 /home/linuxize/script.sh

at 09:00 -f /home/linuxize/script.sh

默认情况下,如果命令产生输出, at 作业完成后,将向用户发送一封包含输出的电子邮件。 调用 at-M 禁止显示电子邮件通知的选项:

at 09:00 -M

使用 -m 发送电子邮件,即使没有输出:

at 09:00 -m

batch 命令#

batch 或其别名 at -b 在系统负载级别允许时调度作业并在批处理队列中执行它们。 默认情况下,作业在系统平均负载低于1.5时执行。 调用时可以指定负载的值 atd 守护程序。 如果系统平均负载高于指定的平均负载,则作业将在队列中等待。

用创建工作 batch,传递您要执行的命令:

echo "command_to_be_run" | batch

指定执行时间

at 实用程序接受各种时间规格。 您可以指定时间,日期和从当前时间开始的增量:

  • 时间 -要指定时间,请使用 HH:MM 要么 HHMM 形成。 要表示12小时制,请使用 am 要么 pm 时间过后。 您也可以使用类似 nowmidnightnoon, 要么 teatime (16:00)。 如果经过了指定的时间,则作业将在第二天执行。

  • 日期 -该命令允许您安排给定日期的作业执行。 可以使用月份名称,日期和可选的年份来指定日期。 您可以使用字符串,例如 todaytomorrow,或工作日。 日期也可以使用 MMDD[CC]YYMM/DD/[CC]YYDD.MM.[CC]YY 要么 [CC]YY-MM-DD 格式。

  • 增量at 也接受增量 now + count time-unit 格式,其中 count 是一个数字, time-unit 可以是以下字符串之一: minuteshoursdays, 要么 weeks

时间,日期和增量可以组合,以下是一些示例:

  • 将工作安排在比当前时间晚十分钟的下一个星期日进行:

    at sunday +10 minutes
  • 安排从现在起两天下午1点运行作业:

    at 1pm + 2 days
  • 安排作业在2020年10月21日12:30运行:

    at 12:30 102120
  • 将作业安排从现在开始运行一小时:

    at now +1 hours

您也可以在 [[CC]YY]MMDDhhmm[.ss] 使用 -t 选项。 这是一个例子:

at -t 202005111321.32

指定队列号

默认情况下,使用 at 被安排在名为 a 和创造的工作 batch 预定在 b 队列。

查询名称可以来自 azAZ。 字母较低的队列的优先级较低,这意味着它们优先于字母较高的队列。

您可以使用 -q 选项。 例如,要在 L 排队,您将运行:

at monday +2 hours -q L

列出待处理的作业

要列出用户的待处理作业,请运行 atq 要么 at -l 命令:

atq

输出将列出所有作业,每行一个。 每行包括作业编号,日期,时间,队列字母和用户名。

9	  Tue May  5 12:22:00 2020 a linuxize
12	Wed Oct 21 12:30:00 2020 a linuxize
15	Tue May  5 09:00:00 2020 a linuxize
6	  Tue May  5 09:00:00 2020 a linuxize
13	Mon May  4 23:08:00 2020 a linuxize
11	Wed Jul  1 10:00:00 2020 a linuxize
4	  Tue May  5 09:00:00 2020 a linuxize

什么时候 atq 以管理用户身份被调用时,它将列出所有用户的待处理作业。

删除待处理的作业

要删除待处理的作业,请调用 atrm 要么 at -r 命令,然后是作业编号。 例如,要删除编号为9的作业,可以运行:

atrm 9

限制用户

/etc/at.deny/etc/at.allow 文件使您可以控制哪些用户可以使用其创建作业 at 要么 batch 命令。 这些文件由用户名列表组成,每行一个用户名。

默认情况下,仅 /etc/at.deny 文件存在且为空,这意味着所有用户都可以使用 at 命令。 如果要拒绝对特定用户的权限,请将用户名添加到此文件中。

如果 /etc/at.allow 文件存在,只有此文件中列出的用户可以使用 at 命令。

如果两个文件都不存在,则只有具有管理权限的用户才能使用 at 命令。

结论#

at 实用程序从标准输入中读取命令,并在以后执行它们。 与crontab不同,使用 at 只执行一次。

有关的所有可用选项的更多信息 at 命令类型 man at 在您的终端中。

如有任何疑问,请随时发表评论。

终点站

Sidebar