先ほどインストールした Apache 2.2.2 だが、こいつを Solaris 10 の新機能である SMF (Service management Facility) で管理させることにした。
SMF というのはサービスを管理する仕組みで、従来のUNIXだと rc とかで設定していたサービスの起動とか停止とかをするためのもの。さらに、サービスが止まったら勝手に再起動してくれたり、設定ファイルを書き換えたら自動的に再起動してくれたりするみたいだが。そういう複雑な事が出来る仕組みは、設定もめんどうくさいだろうと思っていたら、やっぱり面倒だった。
Google で見つけた、Apache Server Configuration (Solaris Zone) を参考にしつつ、何とか起動するようにした手順(というか、内容は先ほどのページそのまま)を以下に残しておく。
その前に、うっかり SUNWaclg SUNWapch2d SUNWapch2r SUNWapch2u (Apache 2 系のパッケージ)とか、SUNWapchd SUNWapchu SUNWapchr(Apache 1 系のパッケージ) を pkgrm してしまった。これを残したまま設定することも可能だったかもしれないが、あまり気にしていない(サーバじゃないし、僕一人しか使っていないし)。
まずは、以下の手順で SMF マニフェストという設定ファイルを作成する。
mkdir /var/svc/manifest/application/web cd /var/svc/manifest/application/web vi apache.xml
中身はこんな感じ。
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type='manifest' name='apache'>
<service name='application/web/apache' type='service' version='1'>
<create_default_instance enabled="true"/>
<single_instance />
<dependency name='filesystem' grouping='require_all' restart_on='none'
type='service'>
<service_fmri value='svc:/system/filesystem/local' />
</dependency>
<exec_method type='method' name='start'
exec='/usr/local/apache2/bin/apachectl start'
timeout_seconds='120' />
<exec_method type='method' name='stop'
exec='/usr/local/apache2/bin/apachectl stop'
timeout_seconds='120' />
<exec_method type='method' name='restart'
exec='/usr/local/apache2/bin/apachectl restart'
timeout_seconds='120' />
<stability value='Unstable' />
<template>
<common_name>
<loctext xml:lang='C'>Apache2(httpd)</loctext>
</common_name>
<documentation>
<manpage title='httpd' section='8'/>
</documentation>
</template>
</service>
</service_bundle>
で、上記ファイルを保存した後に、XMLファイルのチェックをおこなう(# はコマンドプロンプト)。今回はわざと間違えてみた(上記ファイルの内容はエラーにはなりません)。
# svccfg -v validate apache.xml svccfg: 文書を解析できませんでした # echo $? 1 #
上記のように $? の値が 1だったら、どこかおかしいので、どこがおかしいのかを調べる。
# xmllint --valid apache.xml
apache.xml:26: parser error : expected '>'
^
#
おかしいところを修正したら、再度チェックする。
# svccfg -v validate apache.xml # echo $? 0 #
$? の値が 0 なら問題なし。なので、マニフェストをインポートする。
svccfg -v import apache.xml
サービスが登録されていることを確認する。
# svcs -v apache STATE NSTATE STIME CTID FMRI disabled - 3:43:03 - svc:/application/web/apache:default #
disabled(使用不可) 状態なので、enabled(使用可能) に変更する。
# svcadm -v enable apache svc:/application/web/apache:default が有効になりました。 #
再度ステータスを確認する。
# svcs -v apache STATE NSTATE STIME CTID FMRI online - 2:55:46 132 svc:/application/web/apache:default #
さらに
サービスの状態を使用不可に変更するには、
# svcadm -v disable apache
サービスを削除する場合は、
# svccfg -v delete apache
だけど、以下のメッセージが出る場合、
svccfg: インスタンス svc:/application/web/apache:default が実行中の可能性があり ます。 実行中でない場合は、delete -f を使用してください。
-f オプションを使って、実行中のサービスを強制的に削除しなければならないようだ。
# svccfg -v delete -f apache
うまく削除できたかどうかを確認する。
# svcs -v apache svcs: パターン 'apache' がどのインスタンスとも一致しません STATE NSTATE STIME CTID FMRI
ちょっとした実験
apache が起動している(有効になっている)状態で、プロセスIDを見てみる。
# svcadm -v enable apache svc:/application/web/apache:default が有効になりました。 # ps ax | grep httpd 18867 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18872 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18873 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18874 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18875 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18876 ? S 0:00 /usr/local/apache2/bin/httpd -k start #
ここで、プロセスを kill してみるが。。。。
# kill -9 18867 18872 18873 18874 18875 18876
ちゃんと、新しい apache のプロセスを起動してくれる。
# ps ax | grep httpd 18889 ? R 0:00 /usr/local/apache2/bin/httpd -k start 18894 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18895 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18896 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18897 ? S 0:00 /usr/local/apache2/bin/httpd -k start 18898 ? S 0:00 /usr/local/apache2/bin/httpd -k start #
けっこうおもろいので、もうちょっとつっこんで調べてみようかと思った。
新しいコメントの投稿