ある日のServer StatusでGracefully finishing状態のプロセスを発見した際の原因調べてる時にやたらややこしかったので個人的なまとめ(まとまってない)。
実際自分で見たときにほんとにまとまって無かったのでCentOS7の7.5辺りで再確認&手直し。(2018/09/21)
apachectlについて
まずapachectlコマンドから整理する。このコマンドには次のサブコマンドを指定できる。
- status,start,restart,stop,graceful,graceful-stop
- configtest
- その他(上記以外)
※厳密には他にも
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}