手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

at(1)

名称

at , batch - 稍后执行命令

用法概要

/usr/bin/at [-c | -k | -s] [-m] [-f file] [-p project] 
     [-q queuename] -t time
/usr/bin/at [-c | -k | -s] [-m] [-f file] [-p project] 
     [-q queuename] timespec...
/usr/bin/at -l [-p project] [-q queuename] [at_job_id. ..]
/usr/bin/at -r at_job_id. ..
/usr/bin/batch [-p project]
/usr/xpg4/bin/at [-c | -k | -s] [-m] [-f file] [-p project] 
     [-q queuename] -t time
/usr/xpg4/bin/at [-c | -k | -s] [-m] [-f file] [-p project] 
     [-q queuename] timespec...
/usr/xpg4/bin/at -l [-p project] [-q queuename] 
     [at_job_id. ..]
/usr/xpg4/bin/at -r at_job_id. ..
/usr/xpg4/bin/batch [-p project]

描述

at

at 实用程序从标准输入读取命令并将它们作为 at-job 组合在一起,以便稍后执行。

at 作业在单独的 shell 调用中执行,在没有控制终端的单独进程组中运行,只是在执行 at 实用程序时生效的环境变量、当前工作目录、文件创建掩码(请参见 umask(1))和系统资源限制(仅限 shksh88,请参见 ulimit(1))会保留并在执行 at 作业时使用。

当提交 at 作业时,at_job_id 和预定时间会写入标准错误。at_job_id 标识符是一个仅由字母数字字符和句点字符组成的字符串。at_job_id 在调度作业时由系统分配,以便唯一标识特定的作业。

作业标准输出和标准错误的用户通知和处理在 –m 选项下介绍。

如果用户的名称显示在 /usr/lib/cron/at.allow 文件中,则允许其使用 atbatch(请参见下文)。如果该文件不存在,则检查 /usr/lib/cron/at.deny 文件以确定是否应该拒绝用户访问 at。如果两个文件都不存在,则仅允许具有 solaris.jobs.user 授权的用户提交作业。如果仅 at.deny 存在并且为空,则允许所有用户使用。at.allowat.deny 文件每行包含一个用户名。

如果用户的帐户为锁定状态,则 cronat 作业不会执行。根据 shadow(4) 中的定义,仅未锁定的帐户可以执行其作业或进程。

batch

batch 实用程序读取命令以便稍后执行。

命令格式:


/usr/bin/batch [-p project]
/usr/xpg4/bin/batch [-p project]

分别等效于:


/usr/bin/at -q b [-p project] now
/usr/xpg4/bin/at -q b -m [-p project] now

其中队列 b 是一个特殊的 at 队列,特别是对于 batch 作业来说。Batch 作业提交到 batch 队列以便立即执行。提交作业的执行可能会因允许并发运行的作业数量限制而延迟。请参见 queuedefs(4)

选项

如果未指定 –c–k–s 选项,缺省情况下 SHELL 环境变量会确定使用哪个 shell。

对于 /usr/xpg4/bin/at/usr/xpg4/bin/batch,如果 SHELL 未设置或为 NULL,则使用 /usr/xpg4/bin/sh

对于 usr/bin/at/usr/bin/batch,如果 SHELL 未设置或为 NULL,则使用 /bin/sh

支持以下选项:

–c

C shell。使用 csh(1) 执行 at 作业。

–k

Korn shell。使用 /bin/ksh 执行 at 作业。

–s

Bourne shell。使用 sh(1) 执行 at 作业。

–f file

指定要用作 at 作业源的文件路径,而非标准输入。

–l

(字母 ell。)如果未指定 at_job_id 操作数,则报告为调用用户调度的所有作业。如果指定了 at_job_id,则仅报告这些作业的信息。

–m

在 at 作业运行后发送邮件到调用用户,通知用户已完成。at 作业生成的标准输出和标准错误也通过邮件发送到用户,除非将其重定向到了其他位置。即使作业没有输出,也会发送邮件。

如果未使用 –m,则通过邮件将作业的标准输出和标准错误提供给用户,除非将其重定向到了其他位置;如果没有此类输出可供提供,则不向用户通知作业已完成。

–p project

指定 atbatch 作业在哪个项目下运行。当配合 –l 选项使用时,将搜索限制在该特定的项目。project 的值首先解释为项目名称,然后解释为可能的项目 ID(如果全是数字)。缺省情况下,使用用户当前的项目。

–q queuename

指定调度作业以提交到哪个队列。当配合 –l 选项使用时,将搜索限制在该特定的队列。queuename 的值限制为从 az 的小写字母。缺省情况下,在调度 at 作业时将其放在队列 a 中。相对地,会保留队列 b 以用于 batch 作业。由于会保留队列 c 以用于 cron 作业,因此它无法配合 –q 选项使用。

–r at_job_id

删除之前由 at 实用程序调度的具有指定 at_job_id 操作数的作业。

–t time

提交作业以在 time 选项参数指定的时间运行,该选项参数必须使用 touch(1) 实用程序指定的格式。

操作数

支持下列操作数:

at_job_id

由之前的 at 实用程序调用在调度作业时报告的名称。

timespec

提交作业以在指定的日期和时间运行。在解释所有 timespec 操作数时会认为它们由空格字符分隔并且是串联在一起的。日期和时间按照用户的时区解释(由 TZ 变量确定),除非时区名称显示为下面 time 的一部分。

在 C 语言环境中,下面的内容介绍了时间规范字符串的三个部分。C 语言环境 LC_TIME 类别的所有值都可以按照不区分大小写的方式识别。

time

time 可以指定为 1、2 或 4 位数字。一位数和两位数可以视为小时,四位数可以视为小时和分钟。还可以选择将时间指定为由冒号分隔的两个数字,表示 hour :minute。时间后面可以跟有 AM/PM 标识(LC_TIME 语言环境类别中 am_pm 关键字的值之一);否则,请采用 24 小时时钟时间表示。GMT、UCT 或 ZULU 时区名称(不区分大小写)可以紧跟其后以指定时间为世界标准时间。其他时区可以使用 TZ 环境变量指定。time 字段还可以为 C 语言环境中以下标记之一:

midnight

指示时间 12:00 am (00:00)。

noon

指示时间 12:00 pm。

now

指示当前日期和时间。调用 at now 会提交 at 作业,作业可能立即执行(即仅受不确定的调度延迟的约束)。

date

可选的 date 可以指定为月份名称(LC_TIME 语言环境类别中 monabmon 关键字的值之一),后跟表示日的数字(可能还跟有由逗号分隔的年份数字)或者星期名称(LC_TIME 语言环境类别中 dayabday 关键字的值之一)。两种特殊的日期可以在 C 语言环境中识别:

today

指示当前日期。

tomorrow

指示当前日期的后一天。

未指定 date 时,如果指定的时间晚于当前时间,则认为是 today,如果早于当前时间,则认为是 tomorrow。如果指定的月份早于当前月份(并且未指定年份),则认为是下一年。

increment

可选的 increment 是具有加号 (+) 前缀和以下后缀之一的数字:minuteshoursdaysweeksmonthsyears。(同时还接受单数形式。)关键字 next 等效于增量数字 + 1。例如,以下是等效的命令:

at 2pm + 1 week
at 2pm next week

用法

此处显示的 at 命令行的形式仅适用于 C 语言环境。midnightnoonnowmonabmondayabdaytodaytomorrowminuteshoursdaysweeksmonthsyearsnext 不支持其他语言环境。

由于命令在单独的 shell 调用中执行,在没有控制终端的单独进程组中运行,因此从调用环境继承的开放式文件描述符、陷阱和优先级都会丢失。

示例

at

示例 1 终端的典型序列

此序列可以在终端使用:

$ at −m 0730 tomorrow
sort < file >outfile
<EOT>
示例 2 重定向输出

此序列演示将标准错误重定向到管道,它在命令过程中非常有用(输出重定向规范的序列很重要):

$ at now + 1 hour <<!
diff file1 file2 2>&1 >outfile | mailx mygroup

示例 3 自行重调度作业

为了让作业自行重调度,可以从 at 作业内部调用 at。例如,此名为 my.daily 的日常处理脚本每天都运行(尽管 crontab 是更适合处理此类工作的工具):

# my.daily runs every day
at now tomorrow < my.daily
daily-processing
示例 4 各种时间和操作数表示法

C 语言环境 timespec 三个部分的间隔非常灵活,只要没有歧义即可。各种时间和操作数表示法的示例有:

at 0815am Jan 24
at 8 :15amjan24
at now "+ 1day"
at 5 pm FRIday
at '17
	utc+
	30minutes'

batch

示例 5 终端的典型序列

此序列可以在终端使用:

$ batch
sort <file >outfile
<EOT>
示例 6 重定向输出

此序列演示将标准错误重定向到管道,它在命令过程中非常有用(输出重定向规范的序列很重要):

$ batch <<!
diff file1 file2 2>&1 >outfile | mailx mygroup
!

环境变量

有关影响 atbatch 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、NLSPATH 和 LC_TIME。

DATEMSK

如果设置了环境变量 DATEMSK,则 at 使用其值作为包含格式字符串的模板文件的全路径名。这些字符串包含格式说明符和文本字符,用于通过适当设置环境变量 LANG 或 LC_TIME 提供一组更丰富的不同语言的所允许的日期格式。所允许的格式说明符列表位于 getdate(3C) 手册页中。“操作数”部分中针对 timedate 参数介绍的格式、特殊名称 noonmidnightnownexttodaytomorrowincrement 参数在设置了 DATEMSK 时无法识别。

SHELL

确定要用于调用 at 作业的命令解释程序的名称。如果该变量未设置或为 NULL,则使用 sh。如果将其设置为非 sh 值,则实现使用该 shell;系统会显示警告诊断以告知将使用哪个 shell。

TZ

确定时区。系统提交作业以在 timespec–t time 指定的时间执行(相对于 TZ 变量指定的时区)。如果 timespec 指定了一个时区,则该时区将覆盖 TZ。如果 timespec 未指定时区并且 TZ 未设置或为 NULL,则使用不确定的缺省时区。

退出状态

将返回以下退出值:

0

at 实用程序已成功提交、删除或列出作业。

>0

发生错误,并且不调度作业。

文件

/usr/lib/cron/at.allow

有权访问 atbatch 实用程序的用户名称(一行一个)。

/usr/lib/cron/at.deny

禁止访问 atbatch 实用程序的用户名称(一行一个)。

属性

有关下列属性的说明,请参见 attributes(5)

/usr/bin/at

属性类型
属性值
可用性
system/core-os
CSI
Not enabled(未启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

/usr/xpg4/bin/at

属性类型
属性值
可用性
system/xopen/xcu4
CSI
Not enabled(未启用)
接口稳定性
Standard(标准)

/usr/bin/batch

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)
接口稳定性
Standard(标准)

/usr/xpg4/bin/batch

属性类型
属性值
可用性
system/xopen/xcu4
CSI
Enabled(已启用)
接口稳定性
Standard(标准)

另请参见

auths(1)crontab(1)csh(1)date(1)ksh88(1)sh(1)touch(1)ulimit(1)umask(1)cron(1M)getdate(3C)auth_attr(4)shadow(4)queuedefs(4)attributes(5)environ(5)standards(5)

附注

不管使用的是什么队列,cron(1M) 任何时候可执行的作业上限是 100 个。

cron 的作业执行可能存在延迟。在某些情况下,这些延迟可能会导致 cron 作业处理看起来似乎已挂起。所有作业最终都会执行。当延迟过长时,唯一的解决方法是终止并重新启动 cron