排队、检查、删除作业,以便以后执行
命令语法格式
at [-V] [-q queue] [-f file] [-mMlv] timespec…
at [-V] [-q queue] [-f file] [-mMkv] [-t time]
at -c job [job…]
atq [-V] [-q queue]
at [-rd] job [job…]
atrm [-V] job [job…]
batch
at -b
命令描述
at, batch,使用/bin/sh,从标准输入或指定文件中读取稍后要执行的命令。
at,在指定的时间执行命令。
atq,列出用户的待处理作业,除非用户是超级用户;在这种情况下,列出了每个人的工作。输出行的格式(每个作业一个)是:作业号,日期,小时,队列,用户名。
atrm,删除由其工作号码标识的工作。
batch,系统负载级别允许时,执行命令;换句话说,当负载平均值降至1.5以下时,或调用atd时指定的值。
时间规范
允许相当复杂的时间规范,扩展POSIX.2标准。:
- 它接受HH:MM形式的时间来在一天中的特定时间运行作业。(如果该时间已经过去,则假设第二天。)
- 您也可以指定midnight, noon, teatime (4pm),并且您可以指定在上午或下午的时间来运行,后缀“AM”或“PM”。
- 您还可以说明作业将在哪一天运行,通过“month-name day”的形式,并提供可选年份的日期,或者MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY, [CC]YY-MM-DD这四种形式的日期。日期的规范必须遵循一天中的时间规范。
- 还可以给出像“now + count time-units”这种形式的日期,其中time-units可以是minutes, hours, days, weeks。
- 您可以通过在时间上后缀today来在今天运行命令,时间上后缀tomorrow来在明天运行命令。
例如,“从现在起,三天后下午4点”运行作业:at 4pm + 3 days;在7月31日上午10点开始工作:at 10am Jul 31;明天凌晨1点开始工作:at 1am tomorrow;
如果您指定的作业在过去的特定时间和日期运行,则作业将尽快运行。例如,如果现在是晚上8点,你执行at 6pm today,那么它将在晚上8:05运行。
时间规范的定义可以在/usr/share/doc/at/timespec中找到。
对于at和batch,命令从标准输入或使用-f选项指定的文件中读取并执行。在调用时,起保留工作目录、环境变量(除了BASH_VERSINFO,DISPLAY,EUID,GROUPS,SHELLOPTS,TERM,UID,_)、umask。
由于当前at实现为setuid程序,因此也不会导出(export)其他环境变量(例如LD_LIBRARY_PATH或LD_PRELOAD)。这可能在将来发生变化。作为解决方法,请在作业中明确设置这些变量。
如果有的话,用户将通过命令收到标准错误和标准输出。邮件将使用命令/usr/sbin/sendmail发送。从su(1)的shell中调用的at或batch命令是,将保留当前的用户ID。如果从su(1)的shell执行at,则登录shell的所有者将接收邮件。
超级用户可以在任何情况下使用这些命令。对于其他用户,使用at的权限由文件/etc/at.allow和/etc/at.deny确定。有关详细信息,请参见at.allow(5)。
命令支持的选项及含义
-q queue
使用指定的队列。队列名称由单个字母组成;有效的队列名称范围从a-z和A-Z。a队列是at的默认值,b是队列batch的默认值。具有较高字母的队列运行时,增加了优先级。特殊队列“=”保留用于当前正在运行的作业。
如果将作业提交到使用大写字母指定的队列,则在作业时,该作业将被视为将其提交给batch。达到时间后,与平均负载相关的批处理规则将被应用。如果atq被赋予特定队列,它将仅显示该队列中的待处理作业。
-m
即使没有输出,也会在作业完成后向用户发送邮件。
-M
切勿向用户发送邮件。
-f file
从文件读取作业,而不是标准输入。
-t time
按时格式运行,格式为[[CC]YY]MMDDhhmm[.ss]
-l
是atq的别名。
-r
是atrm的别名。
-d
是atrm的别名。
-b
是batch的别名。
-v
在读取作业之前,显示作业执行的时间。显示的时间将采用“Thu Feb 20 14:50:00 1997”的格式。
-c
将命令行中列出的作业相关的信息打印到标准输出。
-V
将版本号打印到标准错误,并成功退出。
注意事项
Linux的batch的正确操作取决于/proc上是否挂载proc-类型目录。
如果文件/var/run/utmp不可用或已损坏,或者如果用户在调用时未登录,则邮件将发送到环境变量LOGNAME中找到的用户ID。 如果未定义或为空,则假定当前用户ID。
当用户竞争资源时,当前实现的at和batch是不合适的。 如果您的站点属于这种情况,您可能需要考虑另一个批处理系统,例如nqs。
相关文件
/var/spool/cron/atjobs
存储作业的目录;这应该是模式700,所有者为daemon。
/var/spool/cron/atspool
存储输出的目录;这应该是模式700,所有者为daemon。
/etc/at.allow, /etc/at.deny
指定那些用户可以使用at服务。
/proc/loadavg
系统平均负载
/var/run/utmp
用于发现当前正在使用系统的用户的信息。
相关手册
at.allow(5), at.deny(5), atd(8), cron(1), nice(1), sh(1), umask(2)
参考文献
- man 1 at, Version 3.1.20-6
更新日志
- 09/26/2018 创建文章