異なるバージョンの httpd を ipalias 環境で複数起動
ポートを変えて複数起動させることはやったことあったんだけど、とある案件のため、複数 IP が振ってあるサーバで環境を構築することになった。
難儀なのは担当しているサーバの VHOST の整理で、技術的に問題になることは少ない。適切に configure し、make を掛ければよい。
チューニングを施し、さあ運用と、割と順調に推移したのだが、うっかり daemon の自動起動スクリプトの設定を忘れていた。
これがちょっと面倒だった。
- pidfile やら lockfile やらは httpd-mpm.config に記述
- RHEL 系なので、起動スクリプトは /etc/init.d/ 配下で管理。適切に shell script を設定
これでいけると思いきや、軽い罠が潜んでいた。
新しく切り分けた httpd に対して、service [script_name] status とすると、古いほうの httpd の pid が返る。/etc/init.d/functions を確認すると、
status() { local base=${1##*/} local pid
とかなってる。
んだこれ。shell 変数は微妙に忘れてしまったが、ARG =~ s[^.*/][];*1 ってことか??
んー、とりあえず echo $base とかを仕込んでみるとどうやら挙動としては PATH のディレクトリ部分を削るという解で良いようだ。
なるほど、新旧両方とも実行バイナリのファイル名は httpd だから判断付かなくなってんだな、こりゃ。
functions によると、status 実行時に対象の pid を知るための First Try は pidof で、Next Try が pid ファイルの確認になってるのはなぜだろう。先に pid ファイルを見たほうがいいんじゃねぇの??*2
今回は結構力技で解決したけど、多分 Best Practice は別に存在するんだろうなぁ。