跳过导航链接 | |
退出打印视图 | |
应用程序包开发者指南 Oracle Solaris 10 1/13 Information Library (简体中文) |
此案例研究在软件包安装期间修改 crontab 文件。
此案例研究展示以下技术:
使用类和类操作脚本
有关更多信息,请参见编写类操作脚本。
在类操作脚本中使用 crontab 命令。
在安装期间编辑多个文件的最高效方式是定义一个类,然后提供类操作脚本。如果您使用了 build 类方法,您将需要为每个编辑的 crontab 文件提供一个 build 类脚本。定义 cron 类是一种更通用的方法。要使用这种方法编辑 crontab 文件,您必须:
在 prototype 文件中定义将编辑的 crontab 文件。
在 prototype 文件中为每个将编辑的 crontab 文件创建一个条目。对于每个文件,将类定义为 cron 并将文件类型定义为 e。使用将编辑的文件的实际名称。
为软件包创建 crontab 文件。
这些文件包含您希望添加到同名的现有 crontab 文件的信息。
为 cron 类创建安装类操作脚本。
i.cron 样例脚本执行以下过程:
确定用户 ID (User ID, UID)。
i.cron 脚本将 user 变量设置为正在处理的 cron 类脚本的基名。该名称是 UID。例如,/var/spool/cron/crontabs/root 的基名是 root,该基名也是 UID。
使用 UID 和 -l 选项执行 crontab。
使用 -l 选项会告诉 crontab 为定义的用户将 crontab 文件内容发送到标准输出。
将 crontab 命令的输出通过管道输出到 sed 脚本,该脚本用于删除以前使用该安装技术添加的所有条目。
将编辑的输出放置到临时文件中。
将 root UID 对应的数据文件(随软件包提供)添加到临时文件,并添加一个标记,以便您知道这些条目的来源。
使用同一 UID 执行 crontab,并使用临时文件作为其输入。
为 cron 类创建删除类操作脚本。
r.cron 脚本与安装脚本基本相同,只不过前者没有用于向 crontab 文件添加信息的过程。
这些过程针对 cron 类中的每个文件执行。
下述 i.cron 和 r.cron 脚本由超级用户执行。以超级用户身份编辑其他用户的 crontab 文件可能导致无法预测的结果。如果需要,请在每个脚本中将以下条目:
crontab $user < /tmp/$$crontab ||
更改为:
su $user -c "crontab /tmp/$$crontab" ||
PKG=case7 NAME=Case Study #7 CATEGORY=application BASEDIR=/opt ARCH=SPARC VERSION=Version 1.0 CLASSES=cron
i pkginfo i i.cron i r.cron e cron /var/spool/cron/crontabs/root ? ? ? e cron /var/spool/cron/crontabs/sys ? ? ?
# PKGINST parameter provided by installation service while read src dest do user=`basename $dest` || exit 2 (crontab -l $user | sed -e "/#$PKGINST$/d" > /tmp/$$crontab) || exit 2 sed -e "s/$/#$PKGINST/" $src >> /tmp/$$crontab || exit 2 crontab $user < /tmp/$$crontab || exit 2 rm -f /tmp/$$crontab done exit 0
# PKGINST parameter provided by installation service while read path do user=`basename $path` || exit 2 (crontab -l $user | sed -e "/#$PKGINST$/d" > /tmp/$$crontab) || exit 2 crontab $user < /tmp/$$crontab || exit 2 rm -f /tmp/$$crontab done exit
41,1,21 * * * * /usr/lib/uucp/uudemon.hour > /dev/null 45 23 * * * ulimit 5000; /usr/bin/su uucp -c "/usr/lib/uucp/uudemon.cleanup" > /dev/null 2>&1 11,31,51 * * * * /usr/lib/uucp/uudemon.poll > /dev/null
0 * * * 0-6 /usr/lib/sa/sa1 20,40 8-17 * * 1-5 /usr/lib/sa/sa1 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A
注 - 如果对一组文件的编辑将导致文件总大小增加超过 10K,请提供一个 space 文件,以便 pkgadd 命令可以允许这种增加。有关 space 文件的更多信息,请参见在目标系统上保留额外空间。