FreeBSDでportsからapacheなどのdaemonプログラムをインストールした場合、起動用スクリプトは/usr/local/etc/rc.dに置かれる。



で、インストールして設定ファイルを修正した後、おもむろに/usr/local/etc/rc.d/apache22 startとして実行することになるわけだが、実はこれでは起動しない。



これはFreeBSDがrc.dシステムを採用しているためで、portsからインストールされ、daemonとして動作するプログラムは、原則として/etc/rc.confでapache22_enable="YES"などと設定しておかなければならない。



シェルスクリプトなので、中身を見れば一目瞭然なわけだが、どんな時でも必ず/etc/rc.confの値は参照される。



俺は勝手に、この記載は普通、システムの起動時に狙いのデーモンプログラムを実行するためだけのものと思いこんでいた。



なので、たとえばapacheの設定のテストをしていて、一回だけサーバを実行して試してみたい、という時にも参照されてしまうので、/etc/rc.confにapache22_enable="YES"と書いていない限り、何度やってもapacheは起動しない。



問題なのは、エラーメッセージが表示されないことで、正常に起動したくさいのに、pgrepでhttpdが見つけられず、頭を抱えることになる。



まあ、出来合いの起動スクリプトではなく、apachectlを直打ちすればいいんだけど。



そういったわけで、/etc/rc.confに値を設定せず、テスト用として一回だけ起動したい場合には、引数にstartではなくonestartを与えて実行kすればよい。たとえば下記のように。
/usr/local/etc/rc.d/apache22 onestart
このほかに俺がonestartを使うのは、sftpがなく、ftpしか使えないクライアントに対し/etc/inetd onestartとしてinetdを起動させるくらい、かな。



SolarisやLinuxのような、runレベルを採用しているシステムに慣れていると驚くところではある。