続いて SMF の設定を

先ほどインストールした 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
#

けっこうおもろいので、もうちょっとつっこんで調べてみようかと思った。

新しいコメントの投稿

このフィールドの内容は非公開にされ、公表されることはありません。
  • HTMLタグは使用できません
  • 行と段落は自動的に折り返されます。

書式オプションに関するより詳しい情報...

CAPTCHA
この質問はあなたが人間であるかどうかについて調べる為と、自動化したスパムを防ぐ為のものです。うまくいかない場合は電子メールでお問い合わせ下さい。
イメージ CAPTCHA
画像の中に見える文字を入力して下さい