httpアクセス時に取得できていた環境変数が突然取得できなくなった

とある環境変数を初期構築時に設定し、それがあることを前提のプログラムがありました。
そして、ある日突然、その環境変数が取得できないようになっており、不具合が起こりました。

その環境変数を「SERVER_MODE」とでも仮称します。
そのSERVER_MODEがproductionの時は本番用の設定を読み込み、developmentの時は開発用の設定を読み込むような作りをしていました。
今回、その環境変数が取得できなかった為、elseに入り予期せぬ動きをしていたのです。
そもそも取得できない時はdieすべきとか、elseに入ってもいいように本番用の設定を書いとくべきって言う安全策を講じてなかったのも良くなかったんですが、
なんで取得できなかったのか?ってことで学んだのでメモ書き。

デーモンの起動・終了にはserviceコマンドを利用しよう - インフラエンジニアway - Powered by HEARTBEATS
まさにこれのことでした。
今まで、apacheを起動させる時は、何も疑わずに

/etc/init.d/httpd start

としていました。
この場合、そのユーザの環境変数が引き継がれるんですね。ここが知らなかった。と言うか、全く意識したことなかった。
と言うのもSERVER_MODEは、/etc/profile.d/*.shにて定義されているだけでhttpd.confやその他には一切の記載はありませんでした。
その為、シェルにログインしたユーザが

/etc/init.d/httpd start

として起動すればSERVER_MODEは引き継がれるので問題は起きないのですが、それ以外の起動方法やシェルを経由しない状態で起動されたりすると環境変数が取得できなくなるのです。
逆に言えば、ユーザの環境変数に影響を受けるとも言えるので、

service httpd start

として、ほぼ引き継がずに起動させた上でプログラムが動くように設定をするって方が良いようです。

今回は、そういった状態の時に恐らく、logrotateの影響で自動再起動がかかったようで、その時にSERVER_MODEが設定されていない状態となったようです。
この辺りはまだ謎な部分もあるのですが、ユーザの環境変数が引き継がれると言うのを全く意識していなかったので勉強になりました!

追記:
service起動をした状態で、phpのexecとかで外部起動するとそっちにはSERVER_MODEが引き継がれずにまた問題が!

ってことで、/etc/sysconfig/httpd でexportしました。おしまい。
参考:
Apache(httpd)の設定 - ふなWiki
起動スクリプト(httpd)を読んでみた - まどろみの思考空間
ブログ Apache+PHPで環境変数を追加したい