at
是一个命令行实用程序,允许您安排在特定时间执行的命令。创建的职位at
仅执行一次。
在这篇文章中,我们将解释如何使用at
及其配套实用程序batch
, atq
, atrm
查看、删除和创建稍后执行的作业。
安装中at
#
根据分布情况,at
您的 Linux 系统上可能存在也可能不存在。
If at
尚未安装,您可以使用发行版的包管理器轻松安装它。
-
Install at
在 Ubuntu 和 Debian 上
sudo apt update
sudo apt install at
-
Install at
在 CentOS 和 Fedora 上
sudo yum install at
安装程序后请确保atd
,调度守护进程正在运行并设置为在引导时启动:
sudo systemctl enable --now atd
如何使用at
命令#
简化的语法为at
命令如下:
The 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
另一种选择是使用这里的文档
:
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
Use the -m
即使没有输出也发送电子邮件:
at 09:00 -m
batch
命令#
batch
或其别名at -b
当系统负载水平允许时,调度作业并在批处理队列中执行它们。默认情况下,当系统平均负载低于 1.5 时执行作业。调用时可以指定负载的值atd
守护进程。如果系统平均负载高于指定的负载,作业将在队列中等待。
创造就业机会batch
,传递你想要执行的命令:
echo "command_to_be_run" | batch
指定执行时间#
The at
实用程序接受广泛的时间规范。您可以指定时间、日期和当前时间的增量:
Time- 要指定时间,请使用HH:MM
or HHMM
形式。要指示 12 小时时间格式,请使用am
or pm
时间过后。您还可以使用字符串,例如now
, midnight
, noon
, or teatime
(16:00)。如果超过指定时间,作业将在第二天执行。
-
Date- 该命令允许您安排作业在给定日期执行。可以使用月份名称后跟日期和可选年份来指定日期。您可以使用字符串,例如today
, tomorrow
,或工作日。日期也可以使用MMDD[CC]YY
, MM/DD/[CC]YY
, DD.MM.[CC]YY
or [CC]YY-MM-DD
格式。
增量 - at
也接受增量now + count time-unit
格式,其中count
是一个数字并且time-unit
可以是以下字符串之一:minutes
, hours
, days
, or weeks
.
时间、日期和增量可以组合,以下是一些示例:
您还可以在中指定时间和日期[[CC]YY]MMDDhhmm[.ss]
使用-t
选项。这是一个例子:
at -t 202005111321.32
指定队列#
默认情况下,使用创建的作业at
被安排在名为的队列中a
以及创造的就业机会batch
被安排在b
queue.
查询的名称可以来自a
to z
and A
to Z
。具有较小字母的队列以较低的友好度运行,这意味着它们比具有较大字母的队列具有优先级。
您可以使用以下命令指定队列-q
选项。例如,要在L
队列,你会运行:
at monday +2 hours -q L
列出待处理的职位#
要列出用户的待处理作业,请运行atq
or 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
When atq
作为管理用户调用,它将列出所有用户的待处理作业。
删除待处理的作业#
要删除挂起的作业,请调用atrm
or at -r
命令后跟作业编号。例如,要删除编号为 9 的作业,您可以运行:
atrm 9
限制用户#
The /etc/at.deny
and /etc/at.allow
文件允许您控制哪些用户可以创建作业at
or batch
命令。这些文件由用户名列表组成,每行一个用户名。
默认情况下,仅/etc/at.deny
文件已存在并且为空,这意味着所有用户都可以使用at
命令。如果要拒绝特定用户的权限,请将用户名添加到此文件中。
If the /etc/at.allow
文件存在,只有该文件中列出的用户才能使用at
命令。
如果这两个文件都不存在,则只有具有管理权限的用户才能使用at
命令。
结论#
The at
实用程序从标准输入读取命令并稍后执行它们。不像crontab,创造的就业机会at
仅执行一次。
有关所有可用选项的更多信息at
命令类型man at
在您的终端中。
如果您有任何疑问,请随时发表评论。