Linux中的at命令
at
是一个命令行程序,可让您安排在特定时间执行的命令。 用at
创建的作业仅执行一次。
在本文中,我们将说明如何使用at
及其配套程序batch
,atq
,atrm
查看,删除和创建要在以后执行的作业。
安装at
取决于发行版,at
可能会或不会出现在您的Linux系统上。
如果未安装at
,则可以使用发行版的软件包管理器轻松安装它。
在Ubuntu和Debian上安装at
sudo apt update sudo apt install at
在CentOS和Fedora上安装at
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/shat>
输入您要执行的一个或多个命令:
tar -xf /home/myfreax/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
另一个选择是使用heredoc文档:
at 09:00 <<END
要从文件而不是标准输入中读取命令,请在文件路径之后使用-f
选项调用命令。 例如,要创建将运行脚本/home/myfreax/script.sh
的作业:
at 09:00 -f /home/myfreax/script.sh
默认情况下,如果命令产生输出,则at
将在作业完成后向用户发送一封包含输出的电子邮件。 使用-M
选项调用at
以禁止显示电子邮件通知:
at 09:00 -M
即使没有输出,也可以使用-m
发送电子邮件:
at 09:00 -m
batch
命令
batch
或其别名at -b
在系统负载级别允许时调度作业并在批处理队列中执行它们。 默认情况下,作业在系统平均负载低于1.5时执行。 可以在调用atd
守护程序时指定负载的值。 如果系统平均负载高于指定的平均负载,则作业将在队列中等待。
要使用batch
创建作业,请传递您要执行的命令:
echo "command_to_be_run" | batch
指定执行时间
at
程序接受各种时间规格。 您可以指定时间,日期和从当前时间开始的增量:
Time -指定时间,请使用HH:MM
或HHMM
形式。 若要指示12小时制,请在时间后使用am
或pm
。 您还可以使用now
,midnight
,noon
或teatime
(16:00)之类的字符串。 如果过了指定的时间,则作业将在第二天执行。
Date -at命令允许您将作业安排在指定的日期。 可以使用月份名称,日期和可选的年份来指定日期。 您可以使用字符串,例如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
您也可以使用-t
选项在[[CC]YY]MMDDhhmm[.ss]
中指定时间和日期。 这是一个例子:
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 myfreax12 Wed Oct 21 12:30:00 2020 a myfreax
15 Tue May 5 09:00:00 2020 a myfreax
6 Tue May 5 09:00:00 2020 a myfreax
13 Mon May 4 23:08:00 2020 a myfreax
11 Wed Jul 1 10:00:00 2020 a myfreax
4 Tue May 5 09:00:00 2020 a myfreax
当以管理用户身份调用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
的所有可用选项的更多信息。
如果您有任何疑问,请随时发表评论。
以上是 Linux中的at命令 的全部内容, 来源链接: utcz.com/z/507501.html