at命令

时间:2019-04-29 03:17:37  来源:igfitidea点击:

使用at命令调度Linux中的任务

at,atq和atrm命令

允许将来在预定的日期或时间执行作业。通常,at命令用于安排作业/脚本,atq用于显示等待运行的作业,atrm用于从队列中删除作业。通常在需要在特定时间/日期运行一次作业时,通常使用at。

at命令的示例

在以下示例中,我们在指定时间11:46 运行命令echohello

sles01:/home/john # echo "hello" > /tmp/hello.txt | at 11:46
warning: commands will be executed using /bin/sh
job 7 at 2013-05-07 11:46

该命令将在指定时间执行。以下是上述预定命令的输出:

sles01:/home/john # ls -l /tmp/hello.txt
-rw-r--r-- 1 root root 6 May  7 11:45 /tmp/hello.txt
sles01:/home/john # cat /tmp/hello.txt
hello

at命令的下一个示例中,我们计划将同一命令调度为在11:50运行。提交作业后,我们运行at -l命令和atq命令以确认我们的作业正在等待执行:

sles01:/home/john # echo "hello" > /tmp/hello.txt | at 11:50
warning: commands will be executed using /bin/sh
job 8 at 2013-05-07 11:50

日期前指示的数字是指作业队列编号。在我们的示例中,编号是8。

sles01:/home/john # atq
8       2013-05-07 11:50 a root

sles01:/home/john # at -l
8       2013-05-07 11:50 a root

注意,atq命令和at -l命令都显示未完成的作业。

如果提交作业并进行更改,然后决定不再希望该特定作业运行,则可以使用atrm命令从队列中删除该作业。在下面的示例中,我们要删除作业编号8

sles01:/home/john # atrm 8
sles01:/home/john # atq

at命令还可用于安排在指定时间运行脚本。这可以通过使用-f选项(文件)来实现:

sles01:/home/john # echo -f /home/john/test.sh | at 11:55
warning: commands will be executed using /bin/sh
job 9 at 2013-05-07 11:55

sles01:/home/john # atq
9       2013-05-07 11:55 a root

上面的命令将调度作业test.sh在11:55运行,我们还可以看到它被分配了作业队列号9

在时间选项

at命令接受格式为HH:MM的时间以在一天的特定时间运行作业。
(如果该时间已经过去,则假定为第二天。)

您还可以指定午夜,中午或下午茶时间(下午4点),并且可以在一天的后缀AM或PM进行早晨或晚间。

您还可以通过传递格式为month-name day的日期(带可选的年份)来说出该作业的执行日期。您还可以按照以下格式指定日期
MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY 或者 [CC]YY-MM-DD

日期的指定必须遵循一天中时间的指定。

您还可以提供类似now + count 时间单位这样的实际,其中时间单位可以是minutes, hours, days, 或者 weeks。

也可以这样 at xx:xx today今天几点执行
at xx:xx tomorrow明天几点执行

at权限

root用户可以运行at命令,但是,普通用户将需要具有必要的特权。这些特权的位置可以在/etc/at.allow和/etc/at.deny文件中找到。

文件/etc/at.allow/etc/at.deny确定哪些用户可以提交命令以供以后执行。

这些文件的格式是用户名列表,每行一个。不允许使用空格。

如果文件/etc/at.allow存在,则仅允许其中提到的用户名使用at

如果文件/etc/at.allow不存在,则检查文件/etc/at.deny,然后允许其中未使用的每个用户名使用。

如果文件/etc/at.deny为空,则意味着每个用户都可以使用at命令。

如果两个文件都不存在,则只允许使用超级用户