Linux中的命令

时间:2020-03-05 15:25:54  来源:igfitidea点击:

“ at”是一个命令行实用程序,可让我们安排在特定时间执行的命令。
用“ at”创建的作业仅执行一次。

在本文中,我们将说明如何使用“ at”及其配套实用程序“ batch”,“ atq”,“ atrm”来查看,删除和创建要在以后执行的作业。

安装“ at”

根据发行版的不同,Linux系统上可能存在“ at”,也可能不存在。

如果未安装“ 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”命令将使用日期和时间(“运行时”),并从标准输入中执行命令。

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

at 09:00

按下“ Enter”键后,系统会显示“ at”命令提示符,该提示符通常以“ at>”开头。
我们还会看到一条警告,告知我们将其中运行命令的shell:

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

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

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

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

at> <EOT>
job 4 at Tue Jan  5 09:00:00 2017

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

除了在“ at”提示符下输入命令外,还有其他方法可以传递我们要运行的命令。
一种方法是使用'echo'并将命令传递给'at':

echo "command_to_be_run" | at 09:00

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

at 09:00 <<ENDcommand_to_be_runEND

要从文件而不是标准输入中读取命令,请在文件路径后加上“ -f”选项来调用命令。
例如,要创建一个将运行脚本'/home/theitroad/script.sh'的作业:

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

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

at 09:00 -M

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

at 09:00 -m

“批处理”命令

当系统负载级别允许时,“批处理”或者其别名“在-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'或者Weekday。日期也可以使用'MMDD [CC] YY','MM/DD/[CC] YY','DD.MM. [CC] YY'或者'[CC] YY-MM-DD'格式表示。
  • 增量-“ at”还接受“现在+计数时间单位”格式的增量,其中“计数”是数字,“时间单位”可以是以下字符串之一:“分钟”,“小时”,“天”或者“周”。

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

  • 将工作安排在比当前时间晚十分钟的下一个星期日进行:
at sunday +10 minutes
  • 安排从现在起两天下午1点运行作业:
at 1pm + 2 days
  • 安排作业在2017年10月21日12:30运行:
at 12:30 102120
  • 安排一个作业从现在开始运行一小时:
at now +1 hours

我们还可以使用“ -t”选项在“ [[[CC] YY] MMDDhhmm [.ss]”中指定时间和日期。
这是一个例子:

at -t 201705111321.32

指定队列

默认情况下,使用“ at”创建的作业计划在名为“ a”的队列中,而使用“ batch”创建的作业计划在“ b”队列中。

查询的名称可以从'a'到'z'以及从'A'到'Z'。
字母较低的队列的优先级较低,这意味着它们优先于字母较高的队列。

我们可以使用“ -q”选项指定队列。
例如,要在“ L”队列中设置作业,可以运行:

at monday +2 hours -q L

列出待处理的作业

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

atq

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

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

当以管理用户身份调用“ atq”时,它将列出所有用户的待处理作业。

删除待处理的作业

要删除挂起的作业,请调用“ atrm”或者“ at -r”命令,后跟作业编号。
例如,要删除编号为9的作业,可以运行:

atrm 9

限制用户

使用“ /etc/at.deny”和“ /etc/at.allow”文件,我们可以使用“ at”或者“ batch”命令控制哪些用户可以创建作业。
这些文件由用户名列表组成,每行一个用户名。

默认情况下,只有“ /etc/at.deny”文件存在并且为空,这意味着所有用户都可以使用“ at”命令。

如果要拒绝对特定用户的权限,请将用户名添加到此文件中。

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

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