at命令
使用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
命令。
如果两个文件都不存在,则只允许使用超级用户
。