FreeBSDでは各種サーバソフトウェアの起動スクリプトは/etc/rc.d、/usr/local/etc/rc.d等のrc.dディレクトリに置かれる。ここにあるスクリプトを実行しようとするといちいち/usr/local/etc/rc.dと打たないといけないので面倒。
/usr/ports/sysutils/bsdadminscriptsでインストールされるシェルスクリプトに以下のようなものがある。
rcstart rcstatus rcstop rcrestart
rconestart rconestatus rconestop rconerestart
これらのスクリプトは、rc.d配下のスクリプトの扱いを(少しだけ)楽にしてくれる。
スクリプト名に"one"が含まれるものは、/etc/rc.confにservice_enable="yes"が含まれて「いない」サービスを扱うためのスクリプト。逆に"one"が含まれて「いない」ものは、service_enable="yes"が含まれて「いる」サービスを扱う。
ややこしいが、要するに[ここ](http://d.hatena.ne.jp/flageo/20080213/p1)でいうところの、onestart, forcestartが必要なケースではスクリプト名に"one"が含まれる方を使う。
オプションは、-sで対象となるサービスの一覧表示、-lで対象スクリプトの場所表示、-pでサーチ対象としているパスの表示。
実行例
$ rcstatus -s
DAEMON
FILESYSTEMS
LOGIN
NETWORKING NETWORK
(略)
zabbix_server
$
$ rcstatus -l apache22
apache22: /usr/local/etc/rc.d/apache22
$
$ rcstatus -p
/etc/rc.d
/usr/local/etc/rc.d
$
/etc/rc.confにftpd_enable="YES"がない場合の実行例。pidの読み取りには管理者権限が必要のようだ。
$ grep ftpd /etc/rc.conf
$
$ rcstatus ftpd
$ rconestatus ftpd
ftpd is not running.
$ sudo rconestart ftpd
Password:
Starting ftpd.
$ rconestatus ftpd
eval: cannot open /var/run/ftpd.pid: Permission denied
ftpd is not running.
$ sudo rconestatus ftpd
ftpd is running as pid 99650.
$ sudo rconestop ftpd
Stopping ftpd.
$
注意点としては、ftpdなどのサービスの指定は、rc.dディレクトリにあるスクリプトファイル名ではなく、スクリプトファイル中に書かれるPROVIDE行での指定に準ずるところ。
なので、こんなことが起こった。
$ grep samba /etc/rc.conf
samba_enable="YES"
$ rcstatus samba
$ rcstatus smbd
$ rcstatus nmbd
$ rcstatus -s |grep smb
nmbd smbd
$
$ grep PROVIDE /usr/local/etc/rc.d/samba
# PROVIDE: nmbd smbd
# PROVIDE: winbindd
$
$ rcstatus nmbd smbd
$ rcstatus "nmbd smbd"
nmbd is running as pid 99768.
smbd is running as pid 99772.
$
Sambaはsmb, samba等では理解してくれず、"nmbd smbd"と指定する必要がある。