※もしかしたら、調べ方が悪くあまりに初歩的な事柄でしたら申し訳ございません。
CentOS6.8上で下記コマンドを実行するとエラーが出てrestartできません。
[root@localhost ~]# service httpd restart httpd を停止中: [ OK ] httpd を起動中: (98)Address already in use: make_sock: could not bind to address [::]:80 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs [失敗]
試しにservice httpd stop を実行してみると、上記のように停止中から[ok]と表示はされるものの、lsof -i | grep httpd で調べてみるとまだhttpdがポートを使用していて正常終了できていないと思われます。
調べてみても、kill -9 [ポート番号]という方法ばかりがでてきて、確かにこの方法でhttpdのポート使用が無くなるとrestartできるのですが、もう一度restartしようとすると上記のようになり、根本的な解決方法が中々見つかりません。
毎度killしなくても普通にrestartできるようにしたいのですが、やり方等ご教示頂けませんでしょうか。
追記:
ご依頼を受けましたので、httpdの起動スクリプトを記載致します。
長くなってしまいますがご了承ください。
コメントアウト箇所は省略しております。
. /etc/rc.d/init.d/functions if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi HTTPD_LANG=${HTTPD_LANG-"C"} INITLOG_ARGS="" apachectl=/usr/sbin/apachectl httpd=${HTTPD-/usr/sbin/httpd} prog=httpd pidfile=${PIDFILE-/var/run/httpd/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd} RETVAL=0 STOP_TIMEOUT=${STOP_TIMEOUT-10} start() { echo -n $"Starting $prog: " LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL } stop() { status -p ${pidfile} $httpd > /dev/null if [[ $? = 0 ]]; then echo -n $"Stopping $prog: " killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd else echo -n $"Stopping $prog: " success fi RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } reload() { echo -n $"Reloading $prog: " if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then RETVAL=6 echo $"not reloading due to configuration syntax error" failure $"not reloading $httpd due to configuration syntax error" else # Force LSB behaviour from killproc LSB=1 killproc -p ${pidfile} $httpd -HUP RETVAL=$? if [ $RETVAL -eq 7 ]; then failure $"httpd shutdown" fi fi echo } case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} $httpd RETVAL=$? ;; restart) stop start ;; condrestart|try-restart) if status -p ${pidfile} $httpd >&/dev/null; then stop start fi ;; force-reload|reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}" RETVAL=2 esac exit $RETVAL
追記2:
質問内でlsof -i | grep httpdの実行結果を載せていなかったので、念のため追記致します。
httpd 8755 root 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8755 root 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8758 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8758 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8759 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8759 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8760 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8760 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8761 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8761 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8762 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8762 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8763 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8763 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8764 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8764 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8765 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8765 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8766 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8766 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN) httpd 8767 apache 4u IPv6 54928 0t0 TCP *:http (LISTEN) httpd 8767 apache 6u IPv6 54937 0t0 TCP *:https (LISTEN)

回答3件
あなたの回答
tips
プレビュー