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"と指定する必要がある。