かきすて

正しいかどうかよくわからない知識をよくわからないままとりあえず公開してみようというコンセプトで運営しています。

svcpropとsvccfg listpropの違い

バイト先で開発環境として使ってるSolaris11のサーバで、memcachedのスレッド数を変更しようとしていて、ふと、「svcpropとsvccfg listpropでは表示される内容が違うなあ」と思った。
正確には下の2つのコマンドの実行結果がわりと違った。

$ svcprop svc:/application/database/memcached:default
$ sudo svccfg -s svc:/application/database/memcached:default listprop

どう違うかと言うといろいろ違うのだが、表示されるプロパティ数がぜんぜん違った。
どういうことだろうと思いいろいろ試しているうちに、listpropのほうではmemcachedで指定した場合と、memcached:defaultで指定した場合でこれまた表示されるプロパティが違うことに気づいた。
svcpropだと同じ。
どういうことだろう。
そもそもFMRIにおける「:」の意味がよく分かっていない。
「:」ってなんだ。
ということで調べてみる。

>SMF の概念 - Oracle Solaris の管理: 一般的なタスク
FMRI には、サービス名とインスタンス名が含まれます。たとえば、rlogin サービスの FMRI は svc:/network/login:rlogin となり、ここでの network/login はサービスを、rlogin はサービスインスタンスをそれぞれ示します。

なるほど。
そういえばApacheの再起動を

$ sudo svcadm restart http

とやってたら、先輩に「それはApacheでなくhttpというサービスを実現するためのものすべてを再起動するという意味になる。今後はapache22を指定しなさい」的なこと(うろおぼえ)を言われた。
その時点では「そうなんだーよくわからん」ぐらいにしか思ってなかったが少し意味が分かった気がする。
さて、表題の件だが、要するにmemcachedにつくプロパティとmemcached:defaultにつくプロパティがあるということだ。たぶん。
memcachedのサービスインスタンスはこのサーバではdefaultしかないのでわかりにくいが、複数あるやつを見ればわかりやすいはず。
例えばこのサーバのpostgresqlは32bit版と64bit版の二つを入れてある(そういえばなぜ二つ入ってるんだろう…)。
これでsvcpropとlistpropを試すと

$ svcprop postgresql_90 | grep start/exec
svc:/application/database/postgresql_90:default_64bit/:properties/start/exec astring /lib/svc/method/postgres_90\ start
svc:/application/database/postgresql_90:default_32bit/:properties/start/exec astring /lib/svc/method/postgres_90\ start

$ svccfg -s postgresql_90 listprop | grep start/exec
start/exec                                                            astring     "/lib/svc/method/postgres_90 start"

という風に、ここであがってるstart/execというプロパティはpostgres_90のサービスインスタンスdefault_32bitとdefault_64bitの両方に適用されており、また、実際にはpostgres_90というサービスについたプロパティだということが分かる。
つまり、svcpropだとサービスインスタンスに適用されているプロパティが一挙に見えていて、svccfgのlistpropだとそのサービスインスタンス固有のプロパティが見えていたということだろう。
ちなみに今回、スレッド数変更のためmemcached:defaultのmemcached/optionsプロパティに「-t 10」といった感じでオプションを加えた。
つまりmemcachedのmemcached/optionsプロパティは変わっていない。

$ svccfg -s memcached listprop | grep options
memcached/options                 astring     "-u" "webservd" "-l" "127.0.0.1" "-p" "11211" "-m" "128m"
$ svccfg -s memcached:default listprop | grep options
memcached/options                 astring     "-u" "webservd" "-l" "127.0.0.1" "-p" "11211" "-m" "128m" "-t" "10"

この通り。
だから、例えばmemcached:hogeとかいうサービスインスタンスを作ったとして、そのmemcached/optionsプロパティを設定しなかったら-tオプションなしで実行されることになる。と思う。
いいのかどうかは正直よく分からない。