云网牛站
所在位置:首页 > Linux命令 > 在Ubuntu/Debian/CentOS/Fedora下安装At及各种At命令的用法

在Ubuntu/Debian/CentOS/Fedora下安装At及各种At命令的用法

2020-05-05 16:05:43作者:李哲稿源:云网牛站

本文介绍在Linux系统下安装At的方法,可安装在Ubuntu/Debian/CentOS/Fedora发行版下,及各种At命令的用法。at是一个命令行实用程序,可让您安排在特定时间执行的命令,使用at创建的作业仅执行一次。在本文中,我们将说明如何使用at及其配套的实用程序批处理atq、atrm来查看、删除和创建要在以后执行的作业。

在Ubuntu/Debian/CentOS/Fedora下安装At及各种At命令的用法

 

安装At的方法

根据发行版的不同,Linux系统上可能存在或可能不存在At。如果未安装at,则可以使用发行版的软件包管理器轻松安装它。

在Ubuntu和Debian上安装:

sudo apt update

sudo apt install 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>

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

at> tar -xf /home/ywnz/file.tar.gz

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

at> <EOT>

job 4 at Tue May  5 09:00:00 2020

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

除了在at提示符下输入命令以外,还有其他方法可以传递您要运行的命令,一种方法是使用echo并将命令传递到以下位置:

echo "command_to_be_run" | at 09:00

参考:echo命令_Linux echo命令使用详解:输出指定的字符串或者变量

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

at 09:00 <<END

command_to_be_run

END

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

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

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

at 09:00 -M

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

at 09:00 -m

 

batch命令

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

要batch创建作业,请传递要执行的命令:

echo "command_to_be_run" | batch

 

指定执行时间

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

Time-要指定时间,请使用HH:MM或HHMM格式,要表示12小时制,请在时间后使用am或pm,您还可以使用now、midnight、noon或teatime (16:00)之类的字符串,如果经过了指定的时间,该作业将在第二天执行。

Date-该命令允许您计划给定日期的作业执行,可以使用月份名称、日期和可选的年份来指定日期,您可以使用字符串,例如today、tomorrow或weekday,日期也可以使用MMDD[CC]YY、MM/DD/[CC]YY、DD.MM.[CC]YY或[CC]YY-MM-DD格式指示。

Increment-还可接受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 ywnz

12 Wed Oct 21 12:30:00 2020 a ywnz

15 Tue May  5 09:00:00 2020 a ywnz

6 Tue May  5 09:00:00 2020 a ywnz

13 Mon May  4 23:08:00 2020 a ywnz

11 Wed Jul  1 10:00:00 2020 a ywnz

4 Tue May  5 09:00:00 2020 a ywnz

以管理用户身份调用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创建的作业仅执行一次。参考:crontab命令_Linux crontab命令使用详解:提交与管理用户需要周期性执行的任务

有关at命令的所有可用选项的更多信息,请在终端中输入man at命令查询。

 

相关主题

at命令_Linux at命令使用详解:在指定时间执行一个任务

Linux命令子频道
精选文章
热门文章