我们来给之前的 “骨架” 脚本加点 “血肉”,并让它更复杂更富有特性吧。 默认的方法已能够为我们做很好的工作了, 但是我们可能会需要它们一些方面的调整。 现在我们将学习如何调整默认方法来符合我们的需要。
#!/bin/sh . /etc/rc.subr name=mumbled rcvar=mumbled_enable command="/usr/sbin/${name}" command_args="mock arguments > /dev/null 2>&1"pidfile="/var/run/${name}.pid"
required_files="/etc/${name}.conf /usr/share/misc/${name}.rules"
sig_reload="USR1"
start_precmd="${name}_prestart"
stop_postcmd="echo Bye-bye"
extra_commands="reload plugh xyzzy"
plugh_cmd="mumbled_plugh"
xyzzy_cmd="echo 'Nothing happens.'" mumbled_prestart() { if checkyesno mumbled_smart; then
rc_flags="-o smart ${rc_flags}"
fi case "$mumbled_mode" in foo) rc_flags="-frotz ${rc_flags}" ;; bar) rc_flags="-baz ${rc_flags}" ;; *) warn "Invalid value for mumbled_mode"
return 1
;; esac run_rc_command xyzzy
return 0 } mumbled_plugh()
{ echo 'A hollow voice says "plugh".' } load_rc_config $name run_rc_command "$1"
附加给 注意:永远不要 在
| |
一个得体的守护进程会创建一个
pidfile 进程文件,
以使其进程能够更容易更可靠地被找到。如果设置了
注意:事实上,rc.subr(8)
在启动一个守护进程前还会使用 pidfile
进程文件来查看它是否已经在运行。使用了
| |
如果守护进程只有在确定的文件存在的情况下才可以运行,
那就将它们列到 注意:来自 rc.subr(8) 的默认方法,通过使用
| |
我们可以在守护进程有异常的时候,自定义发送给守护进程的信号。
特别是, 注意:信号名称应当以不包含 | |
在默认的方法前面或后面执行附加任务是很容易的。
对于我们脚本所支持的每条命令参数而言,我们可以定义
注意:如果我们需要的话,用自定义的
别忘了你可以将任意的有效的 sh(1) 表达式插入到方法和你定义的 pre- 与 post-commands 命令中。 在大部分情况下,调用函数使实际任务有好的风格, 但千万不要让风格限制了你对其幕后到底是怎么回事的思考。 | |
如果我们愿意实现一些自定义参数,
这些参数也可被认作为我们脚本的 命令,我们需要在
注意:
我们从 | |
我们的脚本提供了两个非标准的命令,
非标准命令在启动或停止的时候不被调用。 通常它们是为了系统管理员的方便。它们还能被其它的子系统所使用, 例如,devd(8),前提是 devd.conf(5) 中已经指定了。 全部可用命令的列表,当脚本不加参数地调用时,在 rc.subr(8) 打印出的使用方法中能够找到。例如, 这就是供学习的脚本用法的内容:
| |
如果脚本需要的话,它可以调用自己的标准或非标准的命令。
这可能看起来有点像函数的调用,但我们知道,命令和 shell
函数并非一直都是同样的东西。举个例子, | |
rc.subr(8) 提供了一个方便的函数叫做
切记对 sh(1) 而言零值意味着真而非零值意味着假。 重要:
下面是 if checkyesno mumbled_enable; then foo fi 相反地,以下面的方式调用 if checkyesno "${mumbled_enable}"; then foo fi | |
我们可以通过修改 | |
某种情况下我们可能需要发出一条重要的信息,那样的话
syslog 可以很好地记录日志。
这可以使用下列 rc.subr(8) 函数来轻松完成:
| |
方法的退出值和它们的 pre-commands 预命令不只是默认被忽略掉。如果
注意:然而,当给一个参数使用 |
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.