2016-06-07 3 views
1

Я установил HAproxy (1.5.14-3.el7) из репозитория CentOS7.2. Когда я перезагружаю службу HAproxy с неправильным haproxy.cfg, неверный код возврата.Процесс HAproxy был неожиданно убит, когда служба HAproxy wss перезагрузилась скриптом sysv init в CentOS7.2

О HAproxy, OS, Systemd информации пожалуйста смотрите ниже:

[[email protected] ~]# rpm -qa | egrep haproxy 
haproxy-1.5.14-3.el7.x86_64 
[[email protected] ~]# 

[[email protected] ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[[email protected] ~]# 

[[email protected] ~]# rpm -qa | egrep systemd 
systemd-libs-219-19.el7.x86_64 
systemd-219-19.el7.x86_64 
systemd-sysv-219-19.el7.x86_64 
[[email protected] ~]# 

Ответный код перезагрузкой неверен.

[[email protected] ~]# service haproxy status 
Redirecting to /bin/systemctl status haproxy.service 
●haproxy.service - HAProxy Load Balancer 
    Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled;  vendor preset: disabled) 
    Active: active (running) since Tue 2016-06-07 11:24:41 UTC; 4s ago 
[[email protected] ~]# 
[[email protected] ~]# 
[[email protected] ~]# more /etc/haproxy/haproxy.cfg 
XXXX             **--> I added an incorrect keyword into haproxy.cfg** 
Global 
.... 
[[email protected] ~]# 
[[email protected] ~]# 
[[email protected] ~]# service haproxy reload 
Redirecting to /bin/systemctl reload haproxy.service 
[[email protected] ~]# 
[[email protected] ~]# echo $? 
0             **--> It was sucessful !!!** 

[[email protected] ~]# 
[[email protected] ~]# service haproxy status 
Redirecting to /bin/systemctl status haproxy.service 
● haproxy.service - HAProxy Load Balancer 
    Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled) 
    Active: active (running) since Tue 2016-06-07 11:24:41 UTC; 21s ago 
    Process: 16507 ExecReload=/bin/kill -USR2 $MAINPID (code=exited, status=0/SUCCESS) 
    Main PID: 16464 (haproxy-systemd) 
    CGroup: /system.slice/haproxy.service 
      tq16464 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid 
      tq16465 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds 
      mq16466 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds 

Jun 07 11:24:41 unknown systemd[1]: Started HAProxy Load Balancer. 
Jun 07 11:24:41 unknown systemd[1]: Starting HAProxy Load Balancer... 
Jun 07 11:24:41 unknown haproxy-systemd-wrapper[16464]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy...id -Ds 
Jun 07 11:24:57 unknown systemd[1]: Reloaded HAProxy Load Balancer. 
Jun 07 11:24:57 unknown haproxy-systemd-wrapper[16464]: haproxy-systemd-wrapper: re-executing 
Jun 07 11:24:57 unknown haproxy-systemd-wrapper[16464]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy... 16466 
Jun 07 11:24:57 unknown haproxy-systemd-wrapper[16464]: [ALERT] 158/112457 (16508) : parsing [/etc/haproxy/haproxy.cfg:9]: unknown k...ction. **--> In fact, it was wrong** 
Jun 07 11:24:57 unknown haproxy-systemd-wrapper[16464]: [ALERT] 158/112457 (16508) : Error(s) found in configuration file : /etc/hap...xy.cfg 
Jun 07 11:24:57 unknown haproxy-systemd-wrapper[16464]: [ALERT] 158/112457 (16508) : Fatal errors found in configuration. 

Так что я descided использовать init.d скрипт SYSV для запуска/перезагрузки/остановки HAproxy службы.

SysV init.d скрипт:

[[email protected] ~]# cat /etc/init.d/haproxy 
#!/bin/sh 
# 
# chkconfig: - 85 15 
# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited \ 
#    for high availability environments. 
# processname: haproxy 
# config: /etc/haproxy/haproxy.cfg 
# pidfile: /var/run/haproxy.pid 

# Script Author: Simon Matter <[email protected]> 
# Version: 2004060600 

### BEGIN INIT INFO 
# Provides: HA-Proxy 
# Required-Start: $network $syslog sshd 
# Required-Stop: 
# Default-Start: 3 4 5 
# Default-Stop: 0 1 2 6 
# Short-Description: HAProxy 
### END INIT INFO 

# Source function library. 
if [ -f /etc/init.d/functions ]; then 
    . /etc/init.d/functions 
elif [ -f /etc/rc.d/init.d/functions ] ; then 
    . /etc/rc.d/init.d/functions 
else 
    exit 0 
fi 

# Source networking configuration. 
. /etc/sysconfig/network 

# Check that networking is up. 
#[ ${NETWORKING} = "no" ] && exit 0 

# This is our service name 
BASENAME=`basename $0` 
if [ -L $0 ]; then 
    BASENAME=`find $0 -name $BASENAME -printf %l` 
    BASENAME=`basename $BASENAME` 
fi 

[ -f /etc/$BASENAME/$BASENAME.cfg ] || exit 1 

RETVAL=0 

start() { 
    /usr/sbin/$BASENAME -c -q -f /etc/$BASENAME/$BASENAME.cfg 
    if [ $? -ne 0 ]; then 
    echo "Errors found in configuration file, check it with '$BASENAME check'." 
    return 1 
    fi 

    echo -n "Starting $BASENAME: " 
    daemon /usr/sbin/$BASENAME -D -f /etc/$BASENAME/$BASENAME.cfg -p /var/run/$BASENAME.pid 
    RETVAL=$? 
    echo 
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$BASENAME 
    return $RETVAL 
} 

stop() { 
    killproc $BASENAME -USR1 
    RETVAL=$? 
    echo 
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$BASENAME 
    [ $RETVAL -eq 0 ] && rm -f /var/run/$BASENAME.pid 
    return $RETVAL 
} 

restart() { 
    /usr/sbin/$BASENAME -c -q -f /etc/$BASENAME/$BASENAME.cfg 
    if [ $? -ne 0 ]; then 
    echo "Errors found in configuration file, check it with '$BASENAME check'." 
    return 1 
    fi 
    stop 
    start 
} 

reload() { 
    /usr/sbin/$BASENAME -c -q -f /etc/$BASENAME/$BASENAME.cfg 
    if [ $? -ne 0 ]; then 
    echo "Errors found in configuration file, check it with '$BASENAME check'." 
    return 1 
    fi 
    /usr/sbin/$BASENAME -D -f /etc/$BASENAME/$BASENAME.cfg -p /var/run/$BASENAME.pid -sf $(cat /var/run/$BASENAME.pid) 
} 

check() { 
    /usr/sbin/$BASENAME -c -q -V -f /etc/$BASENAME/$BASENAME.cfg 
} 

rhstatus() { 
    status $BASENAME 
} 

    condrestart() { 
    [ -e /var/lock/subsys/$BASENAME ] && restart || : 
} 

# See how we were called. 
case "$1" in 
    start) 
    start 
    ;; 
    stop) 
    stop 
    ;; 
    restart) 
    restart 
    ;; 
    reload) 
    reload 
    ;; 
    condrestart) 
    condrestart 
    ;; 
    status) 
    rhstatus 
    ;; 
    check) 
    check 
    ;; 
    *) 
    echo $"Usage: $BASENAME {start|stop|restart|reload|condrestart|status|check}" 
    exit 1 
esac 

exit $? 

Когда я перезарядил HAproxy Serivce с правильным haproxy.cfg, команда (служба HAProxy перезарядка) возвращается 0, но статус HAproxy стал не удалось.

[[email protected] ~]# service haproxy status 
● haproxy.service - LSB: HAProxy 
    Loaded: loaded (/etc/rc.d/init.d/haproxy) 
    Active: active (running) since Tue 2016-06-07 11:33:22 UTC; 1h 14min ago 
    Docs: man:systemd-sysv-generator(8) 
    Process: 16636 ExecStart=/etc/rc.d/init.d/haproxy start (code=exited, status=0/SUCCESS) 
Main PID: 16641 (haproxy) 
    CGroup: /system.slice/haproxy.service 
      mq16641 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid 

Jun 07 11:33:22 unknown systemd[1]: Starting LSB: HAProxy... 
Jun 07 11:33:22 unknown haproxy[16636]: Starting haproxy: [ OK ] 
Jun 07 11:33:22 unknown systemd[1]: Started LSB: HAProxy. 
[[email protected] ~]# 
[[email protected] ~]# service haproxy reload 
Reloading haproxy configuration (via systemctl):   [ OK ] 
[[email protected] ~]# echo $? 
0              **--> It was sucessful !!!** 
[[email protected] ~]# 
[[email protected] ~]# service haproxy status 
● haproxy.service - LSB: HAProxy 
    Loaded: loaded (/etc/rc.d/init.d/haproxy) 
    Active: failed (Result: signal) since Tue 2016-06-07 12:48:01 UTC; 1s ago 
    Docs: man:systemd-sysv-generator(8) 
    Process: 16869 ExecStop=/etc/rc.d/init.d/haproxy stop (code=exited, status=0/SUCCESS) 
    Process: 16863 ExecReload=/etc/rc.d/init.d/haproxy reload (code=exited, status=0/SUCCESS) 
    Process: 16636 ExecStart=/etc/rc.d/init.d/haproxy start (code=exited, status=0/SUCCESS) 
Main PID: 16868 (code=killed, signal=KILL) 

Jun 07 11:33:22 unknown systemd[1]: Starting LSB: HAProxy... 
Jun 07 11:33:22 unknown haproxy[16636]: Starting haproxy: [ OK ] 
Jun 07 11:33:22 unknown systemd[1]: Started LSB: HAProxy. 
Jun 07 12:48:00 unknown systemd[1]: Reloaded LSB: HAProxy. 
Jun 07 12:48:00 unknown systemd[1]: haproxy.service: main process exited, code=killed, status=9/KILL **--> It was killed ,but I don't know which process killed it, Cgroup ?** 
Jun 07 12:48:01 unknown haproxy[16869]: [FAILED] 
Jun 07 12:48:01 unknown systemd[1]: Unit haproxy.service entered failed state. 
Jun 07 12:48:01 unknown systemd[1]: haproxy.service failed. 
[[email protected] ~]# 

Я использовал новую Systemd, чтобы получить подробные журналы

Jun 07 13:02:59 elb systemd[1]: Starting LSB: HAProxy... 
Jun 07 13:02:59 elb systemd[7010]: Executing: /etc/rc.d/init.d/haproxy start 
Jun 07 13:02:59 elb haproxy[7010]: Starting haproxy: [ OK ] 
Jun 07 13:02:59 elb systemd[1]: Child 7010 belongs to haproxy.service 
Jun 07 13:02:59 elb systemd[1]: haproxy.service: control process exited, code=exited status=0 
Jun 07 13:02:59 elb systemd[1]: haproxy.service got final SIGCHLD for state start 
Jun 07 13:02:59 elb systemd[1]: Main PID loaded: 7015 
Jun 07 13:02:59 elb systemd[1]: haproxy.service changed start -> running 
Jun 07 13:02:59 elb systemd[1]: Job haproxy.service/start finished, result=done 
Jun 07 13:02:59 elb systemd[1]: Started LSB: HAProxy.   **--> start HAproxy successfully ** 


Jun 07 13:03:27 elb systemd[1]: Trying to enqueue job haproxy.service/reload/replace 
Jun 07 13:03:27 elb systemd[1]: Installed new job haproxy.service/reload as 9504 
Jun 07 13:03:27 elb systemd[1]: Enqueued job haproxy.service/reload as 9504 


Jun 07 13:03:27 elb systemd[1]: About to execute: /etc/rc.d/init.d/haproxy reload 
Jun 07 13:03:27 elb systemd[1]: Forked /etc/rc.d/init.d/haproxy as 7060 
Jun 07 13:03:27 elb systemd[1]: haproxy.service changed running -> reload 
Jun 07 13:03:27 elb systemd[7060]: Executing: /etc/rc.d/init.d/haproxy reload 
Jun 07 13:03:27 elb systemd[1]: Child 7015 belongs to haproxy.service 
Jun 07 13:03:27 elb systemd[1]: Main PID changing: 7015 -> 7065 
Jun 07 13:03:27 elb systemd[1]: Child 7060 belongs to haproxy.service 
Jun 07 13:03:27 elb systemd[1]: haproxy.service: control process exited, code=exited status=0 
Jun 07 13:03:27 elb systemd[1]: haproxy.service got final SIGCHLD for state reload 
Jun 07 13:03:27 elb systemd[1]: haproxy.service changed reload -> running 
Jun 07 13:03:27 elb systemd[1]: Job haproxy.service/reload finished, result=done 
Jun 07 13:03:27 elb systemd[1]: Reloaded LSB: HAProxy. **--> successful to reload HAproxy** 

Jun 07 13:03:27 elb systemd[1]: Child 7065 belongs to haproxy.service 
Jun 07 13:03:27 elb systemd[1]: haproxy.service: main process exited, code=killed, status=9/KILL **--> process 7065 has been killed unexpectly** 
Jun 07 13:03:27 elb systemd[1]: haproxy.service changed running -> failed 
Jun 07 13:03:27 elb systemd[1]: Unit haproxy.service entered failed state. 
Jun 07 13:03:27 elb systemd[1]: haproxy.service failed. 
Jun 07 13:03:27 elb systemd[1]: haproxy.service: cgroup is empty **-->Did cgroup killed process 7065? Is it a bug of systemd? ** 

В CentOS7.1, я использую скрипт SysV инициализации (пожалуйста, смотрите выше), чтобы перезагрузить HAProxy и «сервис HAproxy перезарядку» команда может вернуть правильный результат.

Я не знаю, что не так в CentOS7.2. Я просто хочу получить следующие результаты перезагрузки HAproxy.

  • Когда haproxy.cfg файл неверен, 'служба HAProxy перезарядка' команда возвращает 1
  • Когда haproxy.cfg файл является правильным, 'служба HAProxy перезарядка' команда возвращает 0

Может кто-нибудь помочь меня ? Спасибо

ответ

-1

Я бы предположил, что это проблема SELinux. Вы можете попробовать изменения для ниже: : VI/и т.д./SELinux/конфигурации

SELINUX = исполнение

SELINUXTYPE = целевой

SELINUX = отключено

: WQ! #save и quit

+0

Отключение SELinux - кувалда. Лучше подойти к корню проблемы, а не просто эффективно отключить безопасность. – siride