OS入れ替えとか、Zabbixのソースビルドからのインスコで出た問題ですが、
サーバー再起動するとPIDを作成するディレクトリごと消えて、Zabbixが起動出来なくなる問題が発生する。
するんですよ奥さん(うるさい
昔の自分ならシェルスクリプトに
mkdirでディレクトリ作って~
所有ユーザー弄って~
パーミッション弄って~
systemctl start zabbix-server投げてー
みたいな事やってました。
そんでも独学とはいえ、最近やれることが増えてきたので色々いじっていきます。
今回弄るのは/etc/init.d/zabbix-serverですね。
中を見てみます。
[sourcecode] conf=/etc/zabbix/zabbix_server.conf pidfile=$(grep -e "^PidFile=.*$" $conf | cut -d= -f2) timeout=10 [/sourcecode]
この辺りで設定ファイル読んでPIDファイルの保存先を抽出してますね。
でも今はその保存先のディレクトリだけが欲しいので、別途piddirという変数へ格納してしまいます。
[sourcecode] # grep -e "^PidFile=.*$" /etc/zabbix/zabbix_server.conf | cut -d= -f2 /var/run/zabbix/zabbix_server.pid [/sourcecode]
変数pidfileの所と同じように実行すると上記のように。
今回は/zabbix_server.pidの部分がまるっと要らないので、この出力結果をさらに加工してしまいます。
sedを使用して加工するのはまぁ、すぐ出てきたのですが、正規表現がまだまだ苦手で・・・これは調べて対応してしまいました。
sed ‘s:/[^/]\+$::’
でいけるようです。
ちょっと調べてみました。
[]で囲まれているものは文字セット。この中に囲まれている任意の1文字がマッチする。
^ は行頭でのマッチ。行の途中に任意の文字列があってもマッチしないとか。
今回の場合は[^/]という指定なので、行頭にある/という任意の文字列と言うことになるのかな。
¥は・・・エスケープじゃね?これは/に対して働いてる形?いや・・・+の方に働いてる?
+は直前にあった文字の1回以上の繰り返し。繰り返し効いてるよねコレ・・・
$は行の終わりにマッチするとのこと。
やっぱ全部はまだ理解できねぇ・・・
今度色々やってみよう・・・。(じゃないと今作ってるツール開発もどのみち頓挫する)
ま、まぁ一応思った通りの動作にはなったようなので、これでいいんじゃないかな。
[sourcecode] # grep -e "^PidFile=.*$" /etc/zabbix/zabbix_server.conf | cut -d= -f2 | sed 's:/[^/]\+$::' /var/run/zabbix [/sourcecode]
あとはぱっと見たときに分るように、変数pidfileの直下にでも追加しておきます。
変数は~・・・piddirでいいかな?
[sourcecode]piddir=$(grep -e "^PidFile=.*$" $conf | cut -d= -f2 | sed 's:/[^/]\+$::')[/sourcecode]
あとは、systemctl start zabbix-serverで動作する部分にディレクトリチェックを噛ませて、無ければ作成するようにすればいいから、
[sourcecode]start() { echo -n $"Starting Zabbix server: " daemon $exec -c $conf rv=$? echo [ $rv -eq 0 ] && touch $lockfile return $rv [/sourcecode]
}
上記の部分に追記していきます。
[sourcecode]start() { echo -n $"Starting Zabbix server: " if [ ! -d $piddir ]; then /bin/mkdir "$piddir" /bin/chown zabbix:zabbix "$piddir" /bin/chmod 700 "$piddir" fi daemon $exec -c $conf rv=$? echo [ $rv -eq 0 ] && touch $lockfile return $rv }[/sourcecode]
あとは、systemctl daemon-reloadコマンドを投げて、いつも通り起動させてあげるだけですかね。
Zabbix-agentも同じような感じになるので、それもやってあげないとデスネ。
※2020/04/12 16:11 直しました。変数名誤字。