2007年6月22日金曜日

FreeBSDの起動時に/usr/local/etc/rc.d/以下が2回実行されるんだけど... b

FreeBSDで/usr/local/etc/rc.d/以下にはportsなどから入れたツールの起動スクリプトが格納され,/etc/rc.confに条件で,OSの起動プロセスの最後で実行される.
ある日サーバのApache2.2の調子が悪くなったのでいろいろ調べたら,プロセスが2重に起動していた,

$ ps -aux grep httpdroot 749 0.0 0.4 143292 16468 ?? Ss 8:56PM 0:00.20 /usr/local/sbin/httpdroot 756 0.0 0.5 143292 18656 ?? Ss 8:56PM 0:00.17 /usr/local/sbin/httpdwww 836 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 837 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 838 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 839 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 840 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 841 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 842 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 843 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 844 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 845 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpd

ログを見てみると,どうやらOSブート時に/usr/local/etc/rc.d/apache22 startが2回行われているっぽい.さて実際rc.dって誰が呼び出してるんだっけ?起動周りは全部/etc/rc から派生していろいろ実行される.それで/usr/local/etc/rc.d/以下のスクリプトは最終的に/etc/rc.d/localpkgというスクリプトが実行を行う.その中ではlocalとして指定されているディレクトリを取得するが,これはlocal_startup変数に格納されており,/usr/default/rc.conf内で,
local_startup="/usr/local/etc/rc.d /usr/X11R6/etc/rc.d" # startup script dirs.

と記述されている.要は,
/usr/local/etc/rc.d/usr/X11R6/etc/rc.d
の2つのディレクトりの中のスクリプトが実行されるわけだが,X11R6のほうをのぞいたら,/usr/localとまったく同じ構成になっていて,おかしいなと思ったら,/usr/X11R6が/usr/localのシンボリックリンクになっていた・・・・だから/usr/local/etc/rc.dも2倍~OSブート時の実行回数も2倍~

0 件のコメント: