# atrm.1

AT(1)

AT(1)

FreeBSD General Commands Manual

AT(1)

## [名称](#__u540D___u79F0_)

`at`, `batch`, `atq`, `atrm` —

排队、检查或删除作业以供以后执行

## [概要](#__u6982___u8981_)

`at` \[`-q` queue] \[`-f` file] \[`-mldbv`] time `at` \[`-q` queue] \[`-f` file] \[`-mldbv`] `-t` \[\[CC]YY]MMDDhhmm\[.SS] `at` `-c` job \[job ...] `at` `-l` \[job ...] `at` `-l` `-q` queue `at` `-r` job \[job ...]

`atq` \[`-q` queue] \[`-v`]

`atrm` job \[job ...]

`batch` \[`-q` queue] \[`-f` file] \[`-mv`] \[time]

## [描述](#__u63CF___u8FF0_)

`at` 和 `batch` 实用程序使用 sh(1) 从标准输入或指定文件中读取命令，这些命令将在以后执行。

`at`

在指定时间执行命令；

`atq`

列出用户的待处理作业，除非用户是超级用户；在这种情况下，每个人的工作都会被列出；

`atrm`

删除工作；

`batch`

在系统负载水平允许时执行命令；换句话说，当负载平均下降到低于活动 CPU 数量的 1.5 倍时，或者在调用 `atrun` 时指定的值。

`at` 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 （如果该时间已经过去，则假定为第二天。） 作为替代方案，可以指定以下关键字: *midnight*, *noon* 或 *teatime* (4pm) 并且时间可以以 *AM* 或 *PM* 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定，或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为： \[*now*] *+* count time-units ，其中时间单位可以是 *minutes*, *hours*, *days*, *weeks*, *months* 或 *years* ，并且可以通过在 time 后面加上 *today* 来告诉 `at` 今天运行作业并通过在 *tomorrow* 后缀时间来运行明天的工作。

例如，要在三天之后的下午4点运行一个作业，使用 `at` 4pm + 3 days ，要在7月31日上午10点运行一个作业，使用 `at` 10am Jul 31 ，要在明天凌晨1点运行一个作业，使用 `at` 1am tomorrow 。

`at` 实用程序还支持 POSIX 时间格式（请参阅 `-t` 选项）。

对于 `at` 和 `batch` ，从标准输入或使用 `-f` 选项指定的文件读取命令并执行。 工作目录、环境（变量 `TERM`, `TERMCAP`, `DISPLAY` 和 *\_* 除外）和 umask 从调用时起保留。 从 su(1) shell 调用的 `at` 或 `batch` 命令将保留当前用户 ID。 如果有的话，用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 `at` ，登录 shell 的所有者将收到邮件。

超级用户在任何情况下都可以使用这些命令。 对于其他用户，使用 `at` 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。

如果文件 /var/at/at.allow 存在，则只允许其中提到的用户名使用 `at` 。 在这两个文件中，仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时，即使在文件末尾，用户才被认为是列出的。 其他行被忽略，可用于注释。

如果 /var/at/at.allow 不存在，则检查 /var/at/at.deny ，然后允许其中未提及的每个用户名使用 `at` 。

如果两者都不存在，则只允许超级用户使用 `at` 。 这是默认配置。

## [实现说明](#__u5B9E___u73B0___u8BF4___u660E_)

请注意， `at` 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 `at` 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度，可以编辑 /etc/cron.d/at 文件，并将由系统 crontab 读取， `SHELL` 和 `PATH` 环境变量从该文件继承。

## [选项](#__u9009___u9879_)

[`-q`](#q) queue

使用指定的队列。 队列名称由单个字母组成；有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 `at` 的默认队列， E 队列是 `batch` 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列，则将其视为当时已提交到批处理。 如果给 `atq` 一个特定的队列，它将只显示该队列中待处理的作业。

[`-m`](#m)

即使没有输出，也可以在作业完成后向用户发送邮件。

[`-f`](#f) file

从 file 而不是标准输入中读取作业。

[`-l`](#l)

不带参数，列出调用用户的所有作业。 如果给出了一个或多个工作编号，请仅列出这些工作。

[`-d`](#d)

是 `atrm` 的别名（此选项已弃用；请改用 `-r` )。

[`-b`](#b)

是 `batch` 的别名。

[`-v`](#v)

对于 `atq`, 显示队列中已完成但尚未删除的作业；否则显示作业将执行的时间。

[`-c`](#c)

将命令行上列出的作业分类到标准输出。

[`-r`](#r)

删除指定的作业。

[`-t`](#t)

使用 POSIX 时间格式指定作业时间。 参数应采用 \[\[CC]YY]MMDDhhmm\[.SS] 形式，其中每对字母代表以下内容：

CC

年份的前两位数字（世纪）。

YY

年份的后两位数。

MM

一年中的月份，从 1 到 12。

DD

一个月中的第几天，从 1 到 31。

hh

一天中的小时，从 0 到 23。

mm

小时的分钟，从 0 到 59。

SS

分钟的秒数，从 0 到 60。

如果未指定 CC 和 YY 字母对，则默认值为当前年份。 如果未指定 SS 字母对，则该值默认为 0。

## [文件](#__u6587___u4EF6_)

/var/at/jobs

包含作业文件的目录

/var/at/spool

包含输出假脱机文件的目录

/var/run/utx.active

登录记录

/var/at/at.allow

允许权限控制

/var/at/at.deny

拒绝权限控制

/var/at/jobs/.lockfile

创造工作锁定文件

## [参见](#__u53C2___u89C1_)

nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)

## [作者](#__u4F5C___u8005_)

At 主要由 Thomas Koenig <<ig25@rz.uni-karlsruhe.de>> 编写。 时间解析例程由 David Parsons <<orc@pell.chi.il.us>> 编写， Joe Halpin <<joe.halpin@attbi.com>> 进行了小幅改进。

## [缺陷](#__u7F3A___u9677_)

如果文件 /var/run/utx.active 不可用或损坏，或者如果在调用 `at` 时用户未登录，则邮件将发送到在环境变量 `LOGNAME` 中找到的用户 ID。 如果未定义或为空，则假定为当前用户 ID。

当前实现的 `at` 和 `batch` 实用程序不适用于用户竞争资源时。 如果是这种情况，另一个批处理系统（例如 *nqs* ）可能更合适。

指定超过 2038 年的日期可能不适用于某些系统。

August 11, 2018

FreeBSD 13.1-RELEASE
