BSD管理者のためのお役立ちツールrcstatus

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"が含まれて「いる」サービスを扱う。
ややこしいが、要するにここでいうところの、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"と指定する必要がある。