apacheの起動,停止,再起動に関するまとめ


ある日のServer StatusでGracefully finishing状態のプロセスを発見した際の原因調べてる時にやたらややこしかったので個人的なまとめ(まとまってない)。
実際自分で見たときにほんとにまとまって無かったのでCentOS7の7.5辺りで再確認&手直し。(2018/09/21)

apachectlについて

まずapachectlコマンドから整理する。このコマンドには次のサブコマンドを指定できる。

  1. status,start,restart,stop,graceful,graceful-stop
  2. configtest
  3. その他(上記以外)

※厳密には他にも
fullstatus(lynxブラウザで決めうちserver-statusページへアクセス),
startssl, sslstart, start-SSL(エラー文吐いて終わるだけ)があるみたいだが省略。
「その他」の中に含んでないので使ってる人は注意。

サブコマンドたち

\$OPTIONSは/etc/sysconfig/httpdに書いてあるもの
\${MAINPID}はhttpdの親プロセスのPID

$1(第一引数) 実際に実行されるコマンド その1 その2 結果
status systemctl status httpd.service - ステータス表示
start systemctl start httpd.service /usr/sbin/httpd $OPTIONS -DFOREGROUND httpd起動
stop systemctl stop httpd.service kill -WINCH ${MAINPID} 緩やかな停止1
restart systemctl restart httpd.service stop -> start2 緩やかな停止1の後httpd起動
graceful systemctl reload httpd.service /usr/sbin/httpd $OPTIONS -k graceful 緩やかな再起動 1
graceful-stop (stopと同じ) (stopと同じ) 緩やかな停止1
$1(第一引数) 実際に実行されるコマンド 結果 備考
configtest /usr/sbin/httpd \$OPTIONS -t コンフィグのシンタックスチェック SELinuxが有効になっていると多少違うが同様

その他の場合何を入れても同様のコマンドの引数に渡されるためいくつか利用されそうな例を挙げる。

引数 実際に実行されるコマンド その1 その2 結果
その他 /usr/sbin/httpd \$OPTIONS "$@" -
reload /usr/sbin/httpd \$OPTIONS reload - 対応してないサブコマンドなのでヘルプが出る
-k stop /usr/sbin/httpd \$OPTIONS -k stop kill -TERM ${MAINPID} 急な停止1
-k graceful /usr/sbin/httpd \$OPTIONS -k graceful kill -USR1 ${MAINPID} 緩やかな再起動 1
-k restart /usr/sbin/httpd \$OPTIONS -k restart kill -HUP ${MAINPID} 急な再起動1
-k graceful-stop /usr/sbin/httpd \$OPTIONS -k graceful-stop kill -WINCH ${MAINPID} 緩やかな停止1

止めたい(即座に)

デフォルトのhttpd.service用設定ではsystemctl経由では不可

apachectl -k stop
#又は
/usr/sbin/httpd -k stop
#又は
kill -TERM ${ROOT_HTTPD_PID}

止めたい(通信中のものは終わり次第)

apachectl stop (-k stopだと↑の通り即座に止まっちゃうので注意)
#又は
apachectl graceful-stop (-k graceful-stopでも実質同じ)
#又は
systemctl stop httpd
#又は
/usr/sbin/httpd -k graceful-stop
#又は
kill -WINCH ${ROOT_HTTPD_PID}

再起動(コンフィグ再読み込み)

子プロセス順次停止と並列に新設定読み込み。構文エラー時は処理しない。

apachectl graceful (-k gracefulでも実質同じ)
#又は
systemctl reload httpd
#又は
/usr/sbin/httpd -k graceful
#又は
kill -USR1 ${ROOT_HTTPD_PID}

CentOS6以前のservice httpd reload仕様

即座に子プロセス停止&新設定読み込み。
構文エラー時は停止したまま。

apachectl -k restart
#又は
/usr/sbin/httpd -k restart
#又は
kill -HUP ${ROOT_HTTPD_PID}