6.5. 启动服务

一个系统提供很多服务是很普通的。这些可以通过不同的方式启动,每种都有其各自的优势。

通过 port 或者 packages 安装的软件通常会放一个系统启动的时候调用 start 参数和系统关闭的时候调用 stop 参数的脚本在 /usr/local/etc/rc.d。这是我们建议的一种用或者期待用root身份启动系统服务的一种方法。这些脚本作为安装的 package 的一部分被注册,并且在删除 package 的时候被删除。

一个普通的启动脚本在 /usr/local/etc/rc.d,像这样:

#!/bin/sh
echo -n ' FooBar'

case "$1" in
start)
        /usr/local/bin/foobar
        ;;
stop)
        kill -9 `cat /var/run/foobar.pid`
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        exit 64
        ;;
esac

exit 0
   

FreeBSD 的启动脚本在 /usr/local/etc/rc.d,它有以 .sh 结尾并且对 root 有执行权限。这些脚本在启动的时候用 start 选项被调用并且在系统关闭的时候调用 stop 来完成他们的任务。所以如果你想让上面的脚本示例在启动的时候运行,你应该在 /usr/local/etc/rc.d 中把他存成叫做 FooBar.sh 的名字并且确认他是可执行的。你可以像下面那样用 chmod(1) 让一个 shell 脚本成为可执行的脚本:

# chmod 755 FooBar.sh

当一个连接被一个适当的端口接收到的时候,一些服务会被 inetd(8) 调用。这对邮件处理服务来讲是很普通的(例如POP and IMAP 等等)。这些服务可以通过编辑 /etc/inetd.conf 来启用。可以在编辑的时候查看 inetd(8) 来了解这个文件的细节。

一些额外的系统服务也许不会隐藏在 /etc/rc.conf中。传统上他们使用在 /etc/rc.local 中的命令来调用。类似于在 FreeBSD 3.1 中没有默认的 /etc/rc.local;如果它被管理员创建,通常它也一样以一般的形式得到执行。注意 rc.local 通常被作为是最后一个访问的文件;如果启动服务有更好的地方,那就放在这里。

Note: 不要将任何命令放在 /etc/rc.conf 中。要启动守护进程或者在启动的时候运行任何命令,应该在 /usr/local/etc/rc.d 中放一个脚本来代替它。

cron(8) 守护进程来启动系统服务也是可以的。这个方法有很多有利的方法,不仅是因为 cron(8)crontab 拥有者身份运行它们的,这些服务也可以用不是 root 身份的用户来启动和管理。

这利用了 cron(8) 的一个特性:时间规范可以用在系统启动后,cron(8) 启动时立刻就来运行程序的 @reboot 来替换。