Perl の環境変数 $ENV{PATH} の初期値はどこを参照しているのか?
Perl の $ENV{PATH} は何処を参照しているのか?
例えば bayon を perl から使うのに Text::Bayon モジュールを利用したら
sh: bayon: command not found
と言うエラーログが残る。
コマンドが見つからない = パスが通っていない、と言う事なんだろうけど、apache を2.2 にしたらパスが変わったのか apache2.0 の時に使えた Lingua::JA::Summarize を使用するスクリプトも
sh: mecab: command not found
となる。
mecab も bayon も /usr/local/bin にインストールしてあるのだけれど、$ENV{PATH} を調べてみると、
$ENV{PATH} = /sbin:/usr/sbin:/bin:/usr/bin
となっており、/usr/local/bin にはパスが通っていない。
この 環境変数はどこを参照しているのかまさに以下のページのような迷い方をした。
apacheの起動ユーザーにPATH通しときゃいいのか?とか、httpd.confにそういう設定が?とか、もしかしてPHP.iniにそんな設定が?とか思ってたんですが、全部ハズレ。
Apache2の環境変数PATHを設定する - masahilog
SetEnvやPassEnvディレクティブを追加してみたり、. bash_profile を変更したり、散々いろいろ試してみたけど、上記ページのおかげでヒントが得られたのでメモ。
CentOS系(というかRedhat系、だろうか)は/etc/sysconfig/httpdがそれに該当するような。探しても調べてもenvvarsの影も形も無かったけど、/etc/init.d/httpdの冒頭箇所で/etc/sysconfig/httpdがあったらそれを評価してからhttpdが起動するようになってる。なんでこんな仕様なんだろうか。
追記でこのように書かれていたのだけれど、/etc/rc.d/init.d/httpd を見てみると、 /etc/sysconfig/httpd のみではなく、 /etc/rc.d/init.d/functions も参照している。
/etc/rc.d/init.d/functions を見ると、ビンゴでした。
# Set up a default search path. PATH="/sbin:/usr/sbin:/bin:/usr/bin" export PATH
ここのパスを変更して、保存。
注意点としては、apache を再起動ではなく 停止してから起動する事。
再起動では反映されませんでした。
ちなみに CentOS (4.x 5.x) での話ですので他のディストリビューションでは違うかもしれません。
-
前の記事
PHP のエラーログ Notice: Undefined variable: を Apacheのエラーログに記録しない様にする 2010.06.19
-
次の記事
perl の配列処理で 標準モジュール List::Util を使う理由 2010.07.01