系统管理指南:高级管理

第 8 章 调度系统任务(任务)

本章介绍如何使用 crontabat 命令来调度例程或单个(一次)系统任务。

本章还说明如何使用以下文件来控制对上述命令的访问:

有关与调度系统任务关联的过程信息,请参见以下内容:

创建和编辑 crontab 文件(任务图)

任务 

说明 

参考 

创建或编辑 crontab 文件。

使用 crontab -e 命令来创建或编辑 crontab 文件。

如何创建或编辑 crontab 文件

验证 crontab 文件是否存在。

使用 ls -l 命令验证 /var/spool/cron/crontabs 文件的内容。

如何验证 crontab 文件是否存在

显示 crontab 文件。

使用 ls -l 命令显示 crontab 文件。

如何显示 crontab 文件

删除 crontab 文件。

crontab 文件设置时使用了受限权限。使用 crontab -r 命令而不是 rm 命令删除 crontab 文件。

如何删除 crontab 文件

拒绝 crontab 访问。

要拒绝用户对 crontab 命令的访问,请通过编辑 /etc/cron.d/cron.deny 文件将用户名添加到该文件中。

如何拒绝 crontab 命令访问

crontab 访问限制于指定的用户。

要允许用户访问 crontab 命令,请将用户名添加到 /etc/cron.d/cron.allow 文件中。

如何将 crontab 命令访问限制于指定的用户

自动执行系统任务的方法

可以设置多个要自动执行的系统任务。其中有些任务应该以固定间隔进行。其他任务只需运行一次,可能是在晚间或周末等非高峰时间。

本节包含有关 crontabat 这两个命令的概述信息,使用这两个命令可以调度要自动执行的例程任务。crontab 命令用于调度重复性任务。at 命令则用于调度只执行一次的任务。

下表概括说明了 crontabat 命令,以及可用来控制对这些命令的访问的文件。

表 8–1 命令摘要:调度系统任务

命令 

调度内容 

文件位置 

控制访问的文件 

crontab

固定间隔的多个系统任务 

/var/spool/cron/crontabs

/etc/cron.d/cron.allow/etc/cron.d/cron.deny

at

单个系统任务  

/var/spool/cron/atjobs

/etc/cron.d/at.deny

也可以使用 Solaris Management Console 的调度作业工具来调度例程任务。有关使用和启动 Solaris Management Console 的信息,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

用于调度重复性作业:crontab

可以使用 crontab 命令来调度例程系统管理任务,使其每日、每周或每月执行一次。

每日 crontab 系统管理任务可能包括以下内容:

每周 crontab 系统管理任务可能包括以下内容:

每月 crontab 系统管理任务可能包括以下内容:

此外,用户还可以调度 crontab 命令以执行其他例程系统任务,例如发送提醒和删除备份文件。

有关调度 crontab 作业的逐步说明,请参见如何创建或编辑 crontab 文件

用于调度单个作业:at

通过 at 命令可以调度要在以后执行的作业。该作业可由单个命令或脚本组成。

crontab 类似,使用 at 命令可以调度例程任务的自动执行。但与 crontab 文件不同的是,at 文件只执行一次任务。然后,便从目录中删除这些文件。因此,在运行将输出定向到独立文件中以供以后检查的单个命令或脚本时,at 命令很有用。

提交 at 作业包括键入命令并按照 at 命令语法指定选项来调度执行作业的时间。有关提交 at 作业的更多信息,请参见at 命令的说明

at 命令在 /var/spool/cron/atjobs 目录中存储您运行的命令或脚本以及当前环境变量的副本。at 作业文件名是一个长数字,用于指定该文件在 at 队列中的位置,后跟 .a 扩展名,例如 793962000.a

cron 守护进程在启动时检查 at 作业并侦听是否提交了新作业。cron 守护进程执行 at 作业后,将从 atjobs 目录中删除 at 作业的文件。有关更多信息,请参见 at(1) 手册页。

有关调度 at 作业的逐步说明,请参见如何创建 at 作业

调度重复性系统任务 (cron)

以下各节介绍如何创建、编辑、显示和删除 crontab 文件,以及如何控制对这些文件的访问。

crontab 文件内

cron 守护进程会根据在每个 crontab 文件中找到的命令来调度系统任务。crontab 文件由命令组成,每个命令占据一行,这些命令将以固定间隔执行。每行开头包含日期和时间信息,以告知 cron 守护进程何时执行命令。

例如,在 SunOS 软件安装期间将提供名为 rootcrontab 文件。该文件的内容包括以下命令行:


10 3 * * * /usr/sbin/logadm (1)
15 3 * * 0 /usr/lib/fs/nfs/nfsfind (2)
1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 (3)
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean (4)

下面介绍了上述每个命令行的输出:

有关 crontab 文件中各行语法的更多信息,请参见crontab 文件项的语法

crontab 文件存储在 /var/spool/cron/crontabs 目录中。在 SunOS 软件安装期间,会提供包括 root 在内的若干个 crontab 文件。请参见下表。

表 8–2 缺省 crontab 文件

crontab 文件

功能 

adm

记帐 

lp

打印 

一般系统功能和文件系统清除 

sys

性能数据收集 

uucp

一般 uucp 清除

除了缺省的 crontab 文件之外,用户还可以创建 crontab 文件,以调度自己的系统任务。其他 crontab 文件按用来创建它们的用户帐户名称(如 bobmarysmithjones)命名。

要访问属于 root 或其他用户的 crontab 文件,需要具有超级用户权限。

后续各节介绍了说明如何创建、编辑、显示和删除 crontab 文件的过程。

cron 守护进程处理调度的方法

cron 守护进程可管理 crontab 命令的自动调度。cron 守护进程将检查 /var/spool/cron/crontab 目录中是否存在 crontab 文件。

cron 守护进程在启动时执行以下任务:

cron 守护进程以几乎相同的方式来控制 at 文件的调度。这些文件存储在 /var/spool/cron/atjobs 目录中。cron 守护进程还侦听来自 crontab 命令的有关已提交的 at 作业的通知。

crontab 文件项的语法

crontab 文件由命令组成,每个命令占据一行,这些命令将按每个命令行的前五个字段指定的时间自动执行。下表中介绍了这五个字段,它们以空格分隔。

表 8–3 crontab 时间字段的可接受值

时间字段 

值 

分钟  

0-59 

小时 

0-23 

月中某日 

1-31 

月份 

1-12 

星期中某日 

0-6(0 = 星期日) 

crontab 时间字段中使用特殊字符时请遵循以下规则:

例如,以下 crontab 命令项将于每月第一天和第十五天下午 4 点在用户的控制台窗口中显示提醒。


0 16 1,15 * * echo Timesheets Due > /dev/console

crontab 文件中的每个命令必须只占据一行,即使这一行非常长也是如此。crontab 文件不识别额外的回车。有关 crontab 项和命令选项的更多详细信息,请参阅 crontab(1) 手册页。

创建和编辑 crontab 文件

创建 crontab 文件的最简单方法是使用 crontab -e 命令。此命令会调用已为系统环境设置的文本编辑器。系统环境的缺省编辑器在 EDITOR 环境变量中定义。如果尚未设置此变量,crontab 命令将使用缺省编辑器 ed。最好选择您熟悉的编辑器。

以下示例说明如何确定是否已定义编辑器,以及如何将 vi 设置为缺省值。


$ which $EDITOR
$ 
$ EDITOR=vi
$ export EDITOR

创建 crontab 文件时,该文件会自动放入 /var/spool/cron/crontabs 目录,并以您的用户名命名。如果具有超级用户权限,则可为其他用户或 root 创建或编辑 crontab 文件。

Procedure如何创建或编辑 crontab 文件

开始之前

如果要创建或编辑属于 root 或其他用户的 crontab 文件,您必须成为超级用户或同等角色。角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

无需成为超级用户,便可编辑自己的 crontab 文件。

  1. 创建新的 crontab 文件,或编辑现有文件。


    $ crontab -e [username]

    其中,username 指定您要为其创建或编辑 crontab 文件的用户帐户的名称。无需具有超级用户权限便可创建自己的 crontab 文件,但如果要为 root 或其他用户创建或编辑 crontab 文件,则必须具有超级用户权限。


    注意 – 注意 –

    如果意外键入了不带选项的 crontab 命令,请按下编辑器的中断字符。使用此字符将退出而不会保存更改。如果保存了更改并退出文件,现有的 crontab 文件将被空文件覆写。


  2. crontab 文件中添加命令行。

    按照crontab 文件项的语法中所述的语法操作。将 crontab 文件放入 /var/spool/cron/crontabs 目录。

  3. 验证 crontab 文件更改。


    # crontab -l [username]

示例 8–1 创建 crontab 文件

以下示例说明如何为其他用户创建 crontab 文件。


# crontab -e jones

添加到新 crontab 文件中的以下命令项将在每个星期日的凌晨 1:00 自动删除用户起始目录中的所有日志文件。由于该命令项不重定向输出,因此将重定向字符添加到 *.log 之后的命令行中。这样可以确保正常执行命令。


# This command helps clean up user accounts.
1 0 * * 0 rm /home/jones/*.log > /dev/null 2>&1

Procedure如何验证 crontab 文件是否存在

  1. 要验证用户的 crontab 文件是否存在,请在 /var/spool/cron/crontabs 目录中使用 ls -l 命令。例如,以下输出说明用户 jonessmithcrontab 文件存在。


    $ ls -l /var/spool/cron/crontabs
    -rw-r--r--  1 root     sys          190 Feb 26 16:23 adm
    -rw-------  1 root     staff        225 Mar  1  9:19 jones
    -rw-r--r--  1 root     root        1063 Feb 26 16:23 lp
    -rw-r--r--  1 root     sys          441 Feb 26 16:25 root
    -rw-------  1 root     staff         60 Mar  1  9:15 smith
    -rw-r--r--  1 root     sys          308 Feb 26 16:23 sys

    使用 crontab -l 命令验证用户的 crontab 文件的内容,如如何显示 crontab 文件中所述。

显示 crontab 文件

crontab -l 命令显示 crontab 文件内容的方式与 cat 命令显示其他类型文件内容的方式非常相似。无需转到 /var/spool/cron/crontabs 目录(crontab 文件所在的目录),便可使用此命令。

缺省情况下,crontab -l 命令显示您自己的 crontab 文件。要显示属于其他用户的 crontab 文件,您必须是超级用户。

Procedure如何显示 crontab 文件

开始之前

成为超级用户或同等角色,以显示属于 root 或其他用户的 crontab 文件。

无需成为超级用户或同等角色,即可显示您自己的 crontab 文件。

  1. 显示 crontab 文件。


    $ crontab -l [username]

    其中,username 指定了要为其显示 crontab 文件的用户帐户的名称。显示其他用户的 crontab 文件需要超级用户权限。


    注意 – 注意 –

    如果意外键入了无选项的 crontab 命令,请按下编辑器的中断字符。使用此字符将退出而不会保存更改。如果保存了更改并退出文件,现有的 crontab 文件将被空文件覆写。



示例 8–2 显示 crontab 文件

此示例说明如何使用 crontab -l 命令来显示用户的缺省 crontab 文件的内容。


$ crontab -l
13 13 * * * chmod g+w /home1/documents/*.book > /dev/null 2>&1


示例 8–3 显示缺省的 root crontab 文件

此示例说明如何显示缺省的 root crontab 文件。


$ suPassword:
Sun Microsystems Inc.   SunOS 5.10      s10_51  May 2004
# crontab -l
#ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
#
# The root crontab should be used to perform accounting data collection.
#
#
10 3 * * * /usr/sbin/logadm
15 3 * * 0 /usr/lib/fs/nfs/nfsfind
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
#10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___


示例 8–4 显示其他用户的 crontab 文件

此示例说明如何显示属于其他用户的 crontab 文件。


$ su
Password:
Sun Microsystems Inc.   SunOS 5.10      s10_51  May 2004
# crontab -l jones
13 13 * * * cp /home/jones/work_files /usr/backup/. > /dev/null 2>&1

删除 crontab 文件

缺省情况下,会设置 crontab 文件保护,以防止使用 rm 命令意外删除 crontab 文件。请改用 crontab -r 命令删除 crontab 文件。

缺省情况下,crontab -r 命令会删除您自己的 crontab 文件。

无需转到 /var/spool/cron/crontabs 目录(crontab 文件所在的目录),便可使用此命令。

Procedure如何删除 crontab 文件

开始之前

成为超级用户或同等角色,以删除属于 root 或其他用户的 crontab 文件。角色包含授权和具有一定权限的命令。

无需成为超级用户或同等角色,即可删除您自己的 crontab 文件。

  1. 删除 crontab 文件。


    $ crontab -r [username]

    其中 username 指定要为其删除 crontab 文件的用户帐户的名称。为其他用户删除 crontab 文件需要超级用户权限。


    注意 – 注意 –

    如果意外键入了无选项的 crontab 命令,请按下编辑器的中断字符。使用此字符将退出而不会保存更改。如果保存了更改并退出文件,现有的 crontab 文件将被空文件覆写。


  2. 验证是否已删除 crontab 文件。


    # ls /var/spool/cron/crontabs
    

示例 8–5 删除 crontab 文件

以下示例说明用户 smith 如何使用 crontab -r 命令删除他的 crontab 文件。


$ ls /var/spool/cron/crontabs
adm     jones     lp     root    smith    sys     uucp
$ crontab -r
$ ls /var/spool/cron/crontabs
adm     jones     lp     root    sys    uucp

控制对 crontab 命令的访问

可以使用 /etc/cron.d 目录中的以下两个文件来控制对 crontab 命令的访问:cron.denycron.allow。这些文件只允许指定的用户执行 crontab 命令任务,例如创建、编辑、显示或删除自己的 crontab 文件。

cron.denycron.allow 文件包含用户名的列表,每行一个用户名。

这些访问控制文件按以下方式协同工作:

编辑或创建 cron.denycron.allow 文件需要超级用户权限。

在 SunOS 软件安装期间创建的 cron.deny 文件包含以下用户名:


$ cat /etc/cron.d/cron.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess

缺省 cron.deny 文件中的用户名都不能访问 crontab 命令。您可以编辑此文件,以添加被拒绝访问 crontab 命令的其他用户名。

未提供缺省的 cron.allow 文件。因此,在安装 Oracle Solaris 软件后,所有用户(缺省 cron.deny 文件中列出的用户除外)都可以访问 crontab 命令。如果创建 cron.allow 文件,则只有这些用户可以访问 crontab 命令。

Procedure如何拒绝 crontab 命令访问

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 编辑 /etc/cron.d/cron.deny 文件并添加用户名,每个用户占据一行。将拒绝访问 crontab 命令的用户包括在内。


    daemon
    bin
    smtp
    nuucp
    listen
    nobody
    noaccess
    username1
    username2
    username3
    .
    .
    .
  3. 验证 /etc/cron.d/cron.deny 文件是否包含新项。


    # cat /etc/cron.d/cron.deny
    daemon
    bin
    nuucp
    listen
    nobody
    noaccess

Procedure如何将 crontab 命令访问限制于指定的用户

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 创建 /etc/cron.d/cron.allow 文件。

  3. root 用户名添加到 cron.allow 文件中。

    如果未将 root 添加到该文件中,则会拒绝超级用户访问 crontab 命令。

  4. 添加用户名,每行一个用户名。

    将允许使用 crontab 命令的用户包括在内。


    root
    username1
    username2
    username3
    .
    .
    .
    

示例 8–6 将 crontab 命令访问限制于指定的用户

以下示例显示一个 cron.deny 文件,该文件用于禁止用户名 jonestempvisitor 访问 crontab 命令。


$ cat /etc/cron.d/cron.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
jones
temp
visitor

以下示例显示一个 cron.allow 文件。用户 rootjoneslpsmith 是仅有的可以访问 crontab 命令的用户。


$ cat /etc/cron.d/cron.allow
root
jones
lp
smith

如何验证受限的 crontab 命令访问

要验证特定用户是否可以访问 crontab 命令,请在使用该用户帐户登录后执行 crontab -l 命令。


$ crontab -l

如果用户可以访问 crontab 命令并已创建 crontab 文件,则会显示该文件。否则,如果用户可以访问 crontab 命令但不存在 crontab 文件,则会显示与以下消息类似的消息:


crontab: can't open your crontab file

此用户已列在 cron.allow 文件中(如果存在该文件),或者该用户未列在 cron.deny 文件中。

如果用户不能访问 crontab 命令,则无论是否存在以前的 crontab 文件,都会显示以下消息:


crontab: you are not authorized to use cron. Sorry.

此消息表明,该用户未列在 cron.allow 文件(如果该文件存在)中,或者该用户已列在 cron.deny 文件中。

使用 at 命令(任务图)

任务 

说明 

参考 

创建 at 作业。

使用 at 命令执行以下操作:

  • 从命令行启动 at 实用程序。

  • 键入要执行的命令或脚本,每行一个。

  • 退出 at 实用程序并保存作业。

如何创建 at 作业

显示 at 队列。

使用 atq 命令显示 at 队列。

如何显示 at 队列

验证 at 作业。

使用 atq 命令确认属于特定用户的 at 作业已提交至队列。

如何验证 at 作业

显示 at 作业。

使用 at -l[job-id] 显示已提交至队列的 at 作业。

如何显示 at 作业

删除 at 作业。

使用 at -r [job-id] 命令从队列中删除 at 作业。

如何删除 at 作业

拒绝访问 at 命令。

要拒绝用户访问 at 命令,请编辑 /etc/cron.d/at.deny 文件。

如何拒绝对 at 命令的访问

调度单个系统任务 (at)

以下各节介绍如何使用 at 命令来执行下列任务:

缺省情况下,用户可以创建、显示和删除自己的 at 作业文件。要访问属于 root 或其他用户的 at 文件,您必须具有超级用户权限。

提交 at 作业时,会为该作业分配作业标识号和 .a 扩展名。此指定将成为该作业的文件名,以及其队列编号。

at 命令的说明

提交 at 作业文件需执行以下步骤:

  1. 调用 at 实用程序并指定命令执行时间。

  2. 键入以后要执行的命令或脚本。


    注 –

    如果此命令或脚本的输出很重要,请确保将输出定向到一个文件中,以便以后检查。


例如,以下 at 作业将在 7 月的最后一天接近午夜时删除用户帐户 smithcore 文件。


$ at 11:45pm July 31
at> rm /home/smith/*core*
at> Press Control-d
commands will be executed using /bin/csh
job 933486300.a at Tue Jul 31 23:45:00 2004

控制对 at 命令的访问

您可以设置一个文件来控制对 at 命令的访问,只允许指定的用户创建、删除或显示有关 at 作业的队列信息。控制对 at 命令的访问的文件 /etc/cron.d/at.deny 由用户名列表构成,每个用户名占据一行。此文件中列出的用户不能访问 at 命令。

在 SunOS 软件安装期间创建的 at.deny 文件包含以下用户名:


daemon
bin
smtp
nuucp
listen
nobody
noaccess

使用超级用户权限,您可以编辑 at.deny 文件,以添加要限制其对 at 命令访问的其他用户名。

Procedure如何创建 at 作业

  1. 启动 at 实用程序,指定所需的作业执行时间。


    $ at [-m] time [date] 
    -m

    在作业完成后发送邮件。

    time

    指定要调度作业的小时。如果不按 24 小时制指定小时,请添加 ampm。可接受的关键字包括 midnightnoonnow。分钟是可选的选项。

    date

    指定月份的前三个或更多字母、一周中的某日或关键字 todaytomorrow

  2. at 提示符下,键入要执行的命令或脚本,每行一个。

    通过在每行结尾处按回车键,可以键入多个命令。

  3. 按 Ctrl-D 组合键,以退出 at 实用程序并保存 at 作业。

    at 作业将被分配一个队列编号,它也是该作业的文件名。退出 at 实用程序时将显示该编号。


示例 8–7 创建 at 作业

以下示例显示了用户 jones 创建的 at 作业,该作业用于在下午 7:30 删除其备份文件。由于她使用了 -m 选项,因此她会在该作业完成后收到电子邮件。


$ at -m 1930
at> rm /home/jones/*.backup
at> Press Control-D
job 897355800.a at Thu Jul  12 19:30:00 2004

她收到一封确认已执行 at 作业的电子邮件。


Your “at” job “rm /home/jones/*.backup”
completed.

以下示例说明 jones 如何调度在星期六凌晨 4:00 执行的大型 at 作业。该作业输出被定向到名为 big.file 的文件中。


$ at 4 am Saturday
at> sort -r /usr/dict/words > /export/home/jones/big.file

Procedure如何显示 at 队列

  1. 要检查在 at 队列中等待的作业,请使用 atq 命令。


    $ atq
    

    此命令可以显示您已创建的 at 作业的状态信息。

Procedure如何验证 at 作业

  1. 要验证您是否已创建了 at 作业,请使用 atq 命令。在以下示例中,atq 命令确认已将属于 jonesat 作业提交至队列。


    $ atq
    Rank	  Execution Date     Owner     Job         Queue   Job Name
      1st   Jul 12, 2004 19:30   jones  897355800.a     a     stdin
      2nd   Jul 14, 2004 23:45   jones  897543900.a     a     stdin
      3rd   Jul 17, 2004 04:00   jones  897732000.a     a     stdin

Procedure如何显示 at 作业

  1. 要显示有关 at 作业的执行时间信息,请使用 at -l 命令。


    $ at -l [job-id]

    其中,-l job-id 选项表示要显示其状态的作业的标识号。


示例 8–8 显示 at 作业

以下示例显示 at -l 命令的输出,该输出提供有关用户已提交的所有作业的状态信息。


$ at -l
897543900.a	Sat Jul 14 23:45:00 2004
897355800.a	Thu Jul 12 19:30:00 2004
897732000.a	Tue Jul 17 04:00:00 2004

以下示例显示使用 at -l 命令指定单个作业时所显示的输出。


$ at -l 897732000.a
897732000.a		Tue Jul 17 04:00:00 2004

Procedure如何删除 at 作业

开始之前

成为超级用户或同等角色,以删除属于 root 或其他用户的 at 作业。角色包含授权和具有一定权限的命令。

无需成为超级用户或同等角色,便可删除自己的 at 作业。

  1. 在作业执行之前从队列中删除 at 作业。


    $ at -r [job-id]

    其中,-r job-id 选项指定要删除的作业的标识号。

  2. 使用 at -l(或 atq)命令,验证是否已删除 at 作业。

    at -l 命令显示 at 队列中剩余的作业。不应显示已指定标识号的作业。


    $ at -l [job-id]

示例 8–9 删除 at 作业

在以下示例中,用户要删除计划在 7 月 17 日凌晨 4 点执行的 at 作业。首先,该用户显示 at 队列,以找到作业标识号。然后,用户从 at 队列中删除此作业。最后,该用户验证是否已从队列中删除此作业。


$ at -l
897543900.a	Sat Jul 14 23:45:00 2003
897355800.a	Thu Jul 12 19:30:00 2003
897732000.a	Tue Jul 17 04:00:00 2003
$ at -r 897732000.a
$ at -l 897732000.a
at: 858142000.a: No such file or directory

Procedure如何拒绝对 at 命令的访问

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 编辑 /etc/cron.d/at.deny 文件并添加要禁止其使用 at 命令的用户名,每行一个用户名。


    daemon
    bin
    smtp
    nuucp
    listen
    nobody
    noaccess
    username1
    username2
    username3
    .
    .
    .

示例 8–10 拒绝 at 访问

以下示例显示了一个 at.deny 文件,该文件已被编辑过,因此用户 smithjones 无法访问 at 命令。


$ cat at.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
jones
smith

Procedure如何验证 at 命令访问已被拒绝

  1. 要验证是否已将用户名正确添加到 /etc/cron.d/at.deny 文件,请在以该用户身份登录后使用 at -l 命令。如果用户 smith 无法访问 at 命令,将显示以下消息:


    # su smith
    Password:
    $ at -l
    at: you are not authorized to use at.  Sorry.

    类似地,如果该用户尝试提交 at 作业,则将显示以下消息:


    $ at 2:30pm
    at: you are not authorized to use at.  Sorry.

    此消息确认该用户已列在 at.deny 文件中。

    如果允许访问 at 命令,则 at -l 命令不会返回任何内容。