2019-07-12に投稿

apacheのconfigtestは"Syntax OK"でもエラー扱い

最初に。ごめんなさい

タイトル盛りました。
正確には、
apacheのconfigtestは"Syntax OK" を標準エラー出力する。戻り値はちゃんと0が返る。
です。

調べてもあまり情報出てこなかったし、誰も気にしていないんだろうけど。

確認したバージョン

Server version: Apache/2.2.34 (Unix)  
Server version: Apache/2.4.33 (Unix)

経緯

定期的に(結構な頻度で)apacheのエイリアスを増やさなきゃいけない不思議な環境がありまして。
いい加減、手作業がダルいので、シェルで自動化しようと考えまして。

# 色々処理をごにょごにょ
doSomething1
doSomething2
doSomething...

service httpd configtest >> logfile
RET=$?
echo $RET >> logfile
if [ ${RET} = 0 ]; then
    service httpd graceful
fi

(今、そらで書いたのでだいぶ怪しい)

で、動かして見たらconfigtestのところがログになかった。
あれ???ってなって、構文ミスったかな? とか、いろいろ見直した。
最終的にやっと気が付いて、

# 色々処理をごにょごにょ
doSomething
doSomething2
doSomething...

service httpd configtest >> logfile 2>&1
RET=$?
echo $RET >> logfile
if [ ${RET} = 0 ]; then
    service httpd graceful
fi

これでちゃんとログに出た。

ちょっと待って

Q. これってapacheの仕様うんぬんの前に……。
A. はい。何らかのエラー出力があった場合もログに出ないので、最初のプログラムはただの僕が作ったバグです。

まあ

戻り値はちゃんと出し分けてるのに(当たり前だ)
出力は出し分けずに標準エラー出力で統一ってのも、なんか不思議な気はする。
まあ、だいたい2>&1するし、実害はないんだけど。


hammhiko

恥を晒して生きていきます。

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント