Edited at

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

More than 1 year has passed since last update.

ある日の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}