Linux中的命令
at
是一个命令行实用程序,可让您安排在特定时间执行的命令。 创造的工作 at
只执行一次。
在本文中,我们将说明如何使用 at
及其配套工具 batch
, atq
, atrm
查看,删除和创建要在以后执行的作业。
正在安装 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 <<END
command_to_be_run
END
要从文件而不是标准输入中读取命令,请使用 -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
时间过后。 您也可以使用类似now
,midnight
,noon
, 要么teatime
(16:00)。 如果经过了指定的时间,则作业将在第二天执行。日期 -该命令允许您安排给定日期的作业执行。 可以使用月份名称,日期和可选的年份来指定日期。 您可以使用字符串,例如
today
,tomorrow
,或工作日。 日期也可以使用MMDD[CC]YY
,MM/DD/[CC]YY
,DD.MM.[CC]YY
要么[CC]YY-MM-DD
格式。增量 —
at
也接受增量now + count time-unit
格式,其中count
是一个数字,time-unit
可以是以下字符串之一:minutes
,hours
,days
, 要么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
队列。
查询名称可以来自 a
至 z
和 A
至 Z
。 字母较低的队列的优先级较低,这意味着它们优先于字母较高的队列。
您可以使用 -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
在您的终端中。
如有任何疑问,请随时发表评论。
终点站