JavaScript is required to for searching.
跳过导航链接
退出打印视图
在 Oracle Solaris 11.1 中管理系统信息、进程和性能     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

1.  管理系统信息(任务)

2.  管理系统进程(任务)

3.  监视系统性能(任务)

4.  调度系统任务(任务)

自动执行系统任务的方式

用于调度重复性作业:crontab

用于调度单个作业:at

调度系统任务

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

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

crontab 文件内

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

crontab 文件项的语法

创建和编辑 crontab 文件

如何创建或编辑 crontab 文件

如何验证 crontab 文件是否存在

显示 crontab 文件

如何显示 crontab 文件

删除 crontab 文件

如何删除 crontab 文件

控制对 crontab 命令的访问

如何拒绝 crontab 命令访问

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

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

使用 at 命令来调度任务

使用 at 命令(任务列表)

调度单个系统任务 (at)

at 命令的说明

控制对 at 命令的访问

如何创建 at 作业

如何显示 at 队列

如何验证 at 作业

如何显示 at 作业

如何删除 at 作业

如何拒绝对 at 命令的访问

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

5.  管理系统控制台、终端设备和电源服务(任务)

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

调度系统任务

本节包含有关使用 crontab 文件来调度系统任务的任务。

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

任务
说明
参考
创建或编辑 crontab 文件。
使用 crontab -e 命令可创建或编辑 crontab 文件。
验证 crontab 文件是否存在。
使用 ls -l 命令验证 /var/spool/cron/crontabs 文件的内容。
显示 crontab 文件。
使用 ls -l 命令显示 crontab 文件。
删除 crontab 文件。
crontab 文件设置时使用了受限权限。使用 crontab -r 命令而不是 rm 命令删除 crontab 文件。
拒绝 crontab 访问。
要拒绝用户对 crontab 命令的访问,请通过编辑 /etc/cron.d/cron.deny 文件将用户名添加到该文件中。
crontab 访问限定于指定的用户。
要允许用户访问 crontab 命令,请将用户名添加到 /etc/cron.d/cron.allow 文件中。

调度重复性系统任务 (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 文件。请参见下表。

表 4-2 缺省 crontab 文件

crontab 文件
功能
adm
记帐
root
一般系统功能和文件系统清除
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 文件由命令组成,每个命令占据一行,这些命令将按每个命令行的前五个字段指定的时间自动执行。下表中介绍了这五个字段,它们以空格分隔。

表 4-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(如果您有 root 用户特权)创建或编辑 crontab 文件。

如何创建或编辑 crontab 文件

开始之前

如果要创建或编辑属于 root 或其他用户的 crontab 文件,您必须承担 root 角色。请参见《Oracle Solaris 11.1 管理:安全服务》中的"如何使用指定给您的管理权限"

您无需承担 root 角色就可以编辑自己的 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]

示例 4-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

如何验证 crontab 文件是否存在

显示 crontab 文件

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

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

如何显示 crontab 文件

开始之前

承担 root 角色以显示属于 root 或其他用户的 crontab 文件。请参见《Oracle Solaris 11.1 管理:安全服务》中的"如何使用指定给您的管理权限"

您无需承担 root 角色即可显示自己的 crontab 文件。

示例 4-2 显示 crontab 文件

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

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

示例 4-3 显示缺省的 root crontab 文件

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

$ suPassword:

# 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___

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

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

$ su
Password:
# 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 文件所在的目录),便可使用此命令。

如何删除 crontab 文件

开始之前

承担 root 角色以删除属于 root 或其他用户的 crontab 文件。角色包含授权和具有特权的命令。请参见《Oracle Solaris 11.1 管理:安全服务》中的"如何使用指定给您的管理权限"

您无需承担 root 角色即可删除自己的 crontab 文件。

  1. 删除 crontab 文件。
    # crontab -r [username]

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


    注意

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


  2. 验证是否已删除 crontab 文件。
    # ls /var/spool/cron/crontabs

示例 4-5 删除 crontab 文件

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

$ ls /var/spool/cron/crontabs
adm     jones     root    smith    sys     uucp
$ crontab -r
$ ls /var/spool/cron/crontabs
adm     jones    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 命令。

如何拒绝 crontab 命令访问

  1. 承担 root 角色。

    请参见《Oracle Solaris 11.1 管理:安全服务》中的"如何使用指定给您的管理权限"

    $ su -
    Password:
    #
  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

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

  1. 承担 root 角色。

    请参见《Oracle Solaris 11.1 管理:安全服务》中的"如何使用指定给您的管理权限"

  2. 创建 /etc/cron.d/cron.allow 文件。
  3. root 角色添加到 cron.allow 文件。

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

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

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

    root
    username1
    username2
    username3
    .
    .
    .

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

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

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

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

$ cat /etc/cron.d/cron.allow
root
jones
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 文件中。