« | »

2009年3月27日

いつも使わないけど、無いと物足りないもの

OSの起動時にapache-tomcatを起動したい場合/etc/init.d/apache-tomcatなどのshスクリプトを書いて「bin/startup.sh」か「bin/catalina.sh start」のどちらかを呼ぶ事になるけど、「JAVA_OPTS」などの環境変数を設定した上で起動したい場合、「/etc/init.d/apache-tomcat」にJAVA_OPTS="-Xmx512M -Xms64M -Dfile.encoding=UTF-8"などと書いても適用されず、サーブレットがまともに動かない。
initスクリプトから呼んでいる「bin/startup.sh」にJAVA_OPTS="-Xmx512M -Xms64M -Dfile.encoding=UTF-8"と書いてもダメ。
わけがわからず数時間悩んだ挙句、「bin/startup.sh」は「bin/catalina.sh start」を呼んでいるだけであることに気づいた…
当然「bin/catalina.sh」にAVA_OPTS="-Xmx512M -Xms64M -Dfile.encoding=UTF-8"などと追加してやると当たり前のように動いた…
つまり、bashのシェル上で環境変数を設定した状態でshのシェルスクリプトを起動すると環境変数はそのスクリプトに渡るけど、shのシェル上から環境変数を設定してshスクリプトを起動しても環境変数は渡らない。
linuxの/bin/shは/bin/bashのシンボリックリンクなのでこの問題は起こらないはずであるが、Solarisにはホンマモノのshが入っているが故にこの問題が起こる。


いつもsolarisにログインするとすぐにbashやzshを起動してshを使うことなんかほとんどないけど、何かをコンパイルする時に変なLD_LIBRARY_PATHを設定していたおかげで思ったライブラリと違うライブラリにリンクしてしまうことはよくある。
シェルでどれだけ環境変数を設定していても、shスクリプトさえ介してやればunsetする必要がないのは、動作をちゃんとわかってさえいればとても便利な仕様である。
そういった環境変数汚染がないということも、shを使う意義として大きいだろう。
普段ほとんど使わないからと言ってLinuxのように/bin/bashへのリンクとなっているshは個人的にいただけない。
そういう意味でもホンマモノのshが入っているsolarisが好きなのである。
昔はダイナミックライブラリとリンクしている/bin/shとスタティックリンクですべて内蔵していた/sbin/shがあったけど、最近のsolarisは/bin/shが/sbin/shのシンボリックリンクとなり、/sbin/shがダイナミックリンクなバイナリになっていてやっぱり時代を感じる。
opensolarisに至っては/bin/shが/usr/gnu/bin/sh経由で/usr/bin/bashへのシンボリックリンクとなっておりがっくしである。
いつも使わないけどに、無いと物足りないもの。それはホンマモノのshである。

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>