# ISPConfig3 - Apache stoppt mit SIGWINCH



## celocore (26. Juli 2011)

Hallo zusammen,

nach Tagen erfolgloser Suche und einem identischen Problem im englischen Forum, frage ich trotzdem nochmal hier nach.

Mein System

- Ubuntu 8.04 LTS in einer Xen VM auf einem Host ebenfalls unter Ubuntu 8.04 LTS
- ISPConfig 3.0.3.3

bringt bei Aktualisierungen der Webeinstellungen auf den verschiedenen angebundenen Systemen folgende Meldung im apache error-log

[notice] caught SIGWINCH, shutting down gracefully

Damit sind jedoch nicht alle Apache-Prozesse tot. Es hilft jetzt nur noch die vorhandenen Prozesse via killall -9 apache2 zu beenden und den Apache neu zu starten. Die im englischen Forum genannte Lösung bleibt bei mir leider ohne Erfolg.
Gibt es vielleicht noch andere Ansätze wo man was machen könnte?


----------



## Till (26. Juli 2011)

Du kannst z.B. das apache2 init script in /etc/init.d/ ändern, dass er statt einem graceful restart immer ein stop - start macht.


----------



## celocore (4. Aug. 2011)

Das hat es leider nicht gebracht.

Gibt es eine Möglichkeit mitzuloggen oder nachzusehen, welche Kommandos vom ISPConfig ausgeführt werden? Laut /usr/local/ispconfig/server/mods-enabled/web_module.inc.php Zeile 142 sollte ja ein /etc/init.d/apache2 reload ausgeführt werden.
Wenn ich das an der Kommandozeile mache, dann sehe ich im Log

[notice] Graceful restart requested, doing restart
[notice] Digest: generating secret for digest authentication ...
[notice] Digest: done
[notice] Apache/2.2.8 (Ubuntu) DAV/2 PHP/5.3.6-11 with Suhosin-Patch mod_ruby/1.2.6 Ruby/1.8.6(2007-09-24) mod_ssl/2.2.8 OpenSSL/0.9.8g configured -- resuming normal operations
[warn] long lost child came home! (pid 26349)

Wenn ich den Restart durch eine Änderung über das ISPC-Panel vornehme gibt es im Log

[notice] caught SIGWINCH, shutting down gracefully

Das sollte doch eigentlich nicht sein, oder? Ideen oder Hinweise zur weiteren Suche?!


----------



## Till (4. Aug. 2011)

Füge mal ein sleep zwischen stop und start ein. bei virtuelle Maschinen kann es je nach Auslastung des Host systems sein, dass apache zu lange zum stoppen braucht und dann der Port noch nicht wieder frei ist, wenn er startet.


----------



## celocore (4. Aug. 2011)

Ups, da hat sich meine Änderung mit Deiner Antwort überschnitten, sorry. Das mit dem sleep hatte ich auch schon probiert... erfolglos.


----------



## Till (4. Aug. 2011)

Du kannst das ganze ja mal wie folgt testen:

1) Debugging in ispconfig einschalten.
2) Den server.sh root cronjob von ispconfig ausschalten durch einfügen von einem # am Anfang der zeile. Du kannst den Cronjob mit dem Befehel "crontab -e" editieren.
3) Eine Einstellung an einem Web ändern, so dass apache neu geladen werden muss.
4) Den server.-sh cronjob mit folgendem Befehl manuell starten:

/usr/local/ispconfig/server/server.sh


----------



## celocore (4. Aug. 2011)

Hi Till,

folgende Ausgaben habe ich in den Log-Files


```
/var/log/ispconfig/ispconfig.log

04.08.2011-11:52 - DEBUG - Set Lock: /usr/local/ispconfig/server/temp/.ispconfig_lock
04.08.2011-11:52 - DEBUG - Found 1 changes, starting update process.
04.08.2011-11:52 - DEBUG - Replicated from master: REPLACE INTO web_domain (`domain_id`,`sys_userid`,`sys_groupid`,`sys_perm_user`,`sys_perm_group`,`sys_perm_other`,`server_id`,`ip_address`,`domain`,`type`,`parent_domain_id`,`vhost_type`,`document_root`,`system_user`,`system_group`,`hd_quota`,`traffic_quota`,`cgi`,`ssi`,`suexec`,`errordocs`,`is_subdomainwww`,`subdomain`,`php`,`ruby`,`redirect_type`,`redirect_path`,`ssl`,`ssl_state`,`ssl_locality`,`ssl_organisation`,`ssl_organisation_unit`,`ssl_country`,`ssl_domain`,`ssl_request`,`ssl_cert`,`ssl_bundle`,`ssl_action`,`stats_password`,`stats_type`,`allow_override`,`apache_directives`,`php_open_basedir`,`custom_php_ini`,`backup_interval`,`backup_copies`,`active`,`traffic_quota_lock`) VALUES ('15','10','10','riud','ru','','8','*','domain1.tld','vhost','0','name','/var/www/clients/client9/web15','web15','client9','-1','-1','n','n','y','1','1','www','mod','n','','','n','','','','','','domain1.tld','','','','','','webalizer','All','','/var/www/clients/client9/web15/web:/var/www/clients/client9/web15/tmp:/var/www/domain1.tld/web:/srv/www/domain1.tld/web:/usr/share/php5:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/var/www_glusterfs/clients/client9/web15/web/','','none','1','y','n')
04.08.2011-11:52 - DEBUG - Calling function 'ssl' from plugin 'apache2_plugin' raised by event 'web_domain_update'.
04.08.2011-11:52 - DEBUG - Calling function 'update' from plugin 'apache2_plugin' raised by event 'web_domain_update'.
04.08.2011-11:52 - DEBUG - exec: chmod 751 /var/www/clients/client9/web15/
04.08.2011-11:52 - DEBUG - exec: chmod 751 /var/www/clients/client9/web15/*
04.08.2011-11:52 - DEBUG - exec: chmod 710 /var/www/clients/client9/web15/web
04.08.2011-11:52 - DEBUG - exec: chmod 777 /var/www/clients/client9/web15/tmp
04.08.2011-11:52 - DEBUG - exec: chmod 755 /var/www/clients/client9/web15/log
04.08.2011-11:52 - DEBUG - exec: usermod --groups sshusers web15
04.08.2011-11:52 - DEBUG - exec: chown web15:client9 /var/www/clients/client9/web15
04.08.2011-11:52 - DEBUG - exec: chmod 755 /var/www/clients/client9/web15/
04.08.2011-11:52 - DEBUG - exec: chown root:root /var/www/clients/client9/web15/
04.08.2011-11:52 - DEBUG - exec: chown web15:client9 /var/www/clients/client9/web15/log/error.log
04.08.2011-11:52 - DEBUG - Disable SSL for: domain1.tld
04.08.2011-11:52 - DEBUG - Add server alias: domain2.tld
04.08.2011-11:52 - DEBUG - Writing the vhost file: /etc/apache2/sites-available/domain1.tld.vhost
04.08.2011-11:52 - DEBUG - Apache status is: 1
04.08.2011-11:52 - DEBUG - Calling function 'restartHttpd' from module 'web_module'.
04.08.2011-11:53 - DEBUG - Apache online status after restart is: 1
04.08.2011-11:53 - DEBUG - Processed datalog_id 453
04.08.2011-11:53 - DEBUG - Remove Lock: /usr/local/ispconfig/server/temp/.ispconfig_lock
```


```
/var/log/apache2/error.log

[Thu Aug 04 11:53:00 2011] [notice] caught SIGWINCH, shutting down gracefully
```
Das bestätigt nochmal, was ich schon weiß, der apache2-Prozess ist nicht beendet, wenn er neu gestartet werden soll. Sagen Dir diese Einträge vielleicht mehr?


----------



## Till (4. Aug. 2011)

Die Zeile im Log besagt ja nur, dass er einen normalen graceful stop durchführt. Es handelt sich dabei also um keine Fehlermeldung.

Poste doch mal Dein apache2 start script aus /etc/init.d


----------



## celocore (4. Aug. 2011)

Habe inziwschen wieder auf das originale umgestellt...


```
#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop apache2 web server
### END INIT INFO
#
# apache2               This init.d script is used to start apache2.
#                       It basically just calls apache2ctl.

ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"

#[ `ls -1 /etc/apache2/sites-enabled/ | wc -l | sed -e 's/ *//;'` -eq 0 ] && \
#echo "You haven't enabled any sites yet, so I'm not starting apache2." && \
#echo "To add and enable a host, use addhost and enhost." && exit 0

#edit /etc/default/apache2 to change this.
HTCACHECLEAN_RUN=auto
HTCACHECLEAN_MODE=daemon
HTCACHECLEAN_SIZE=300M
HTCACHECLEAN_DAEMON_INTERVAL=120
HTCACHECLEAN_PATH=/var/cache/apache2/mod_disk_cache
HTCACHECLEAN_OPTIONS=""

set -e
if [ -x /usr/sbin/apache2 ] ; then
        HAVE_APACHE2=1
else
        echo "No apache MPM package installed"
        exit 0
fi

. /lib/lsb/init-functions

test -f /etc/default/rcS && . /etc/default/rcS
test -f /etc/default/apache2 && . /etc/default/apache2

APACHE2CTL="$ENV /usr/sbin/apache2ctl"
HTCACHECLEAN="$ENV /usr/sbin/htcacheclean"

check_htcacheclean() {
        [ "$HTCACHECLEAN_MODE" = "daemon" ] || return 1

        [ "$HTCACHECLEAN_RUN"  = "yes"    ] && return 0

        [ "$HTCACHECLEAN_RUN"  = "auto" \
          -a -e /etc/apache2/mods-enabled/disk_cache.load ] && return 0

        return 1
}

start_htcacheclean() {
        $HTCACHECLEAN $HTCACHECLEAN_OPTIONS -d$HTCACHECLEAN_DAEMON_INTERVAL \
                        -i -p$HTCACHECLEAN_PATH -l$HTCACHECLEAN_SIZE

}

stop_htcacheclean() {
        killall htcacheclean 2> /dev/null || echo ...not running
}

pidof_apache() {
    # if pidof is null for some reasons the script exits automagically
    # classified as good/unknown feature
    PIDS=`pidof apache2` || true

    PFILE=`. /etc/apache2/envvars ; echo $APACHE_PID_FILE`
    if [ -z "$PFILE" ] ; then
        echo ERROR: APACHE_PID_FILE needs to be defined in /etc/apache2/envvars >&2
        exit 2
    fi

    [ -e $PFILE ] && PIDS2=`cat $PFILE`

    # if there is a pid we need to verify that belongs to apache2
    # for real
    for i in $PIDS; do
        if [ "$i" = "$PIDS2" ]; then
            # in this case the pid stored in the
            # pidfile matches one of the pidof apache
            # so a simple kill will make it
            echo $i
            return 0
        fi
    done
    return 1
}

apache_stop() {
        if `$APACHE2CTL configtest > /dev/null 2>&1`; then
                # if the config is ok than we just stop normaly
                $APACHE2CTL graceful-stop
        else
                # if we are here something is broken and we need to try
                # to exit as nice and clean as possible
                PID=$(pidof_apache)

                if [ "${PID}" ]; then
                        # in this case it is everything nice and dandy
                        # and we kill apache2
                        log_warning_msg "We failed to correctly shutdown apache, so we're now killing all running apache processes. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!"
                        kill $PID
                elif [ "$(pidof apache2)" ]; then
                        if [ "$VERBOSE" != no ]; then
                                echo " ... failed!"
                                echo "You may still have some apache2 processes running.  There are"
                                echo "processes named 'apache2' which do not match your pid file,"
                                echo "and in the name of safety, we've left them alone.  Please review"
                                echo "the situation by hand."
                        fi
                        return 1
                fi
        fi
}

# Stupid hack to keep lintian happy. (Warrk! Stupidhack!).
case $1 in
        start)
                log_daemon_msg "Starting web server" "apache2"
                if $APACHE2CTL start; then
                        if check_htcacheclean ; then
                                log_progress_msg htcacheclean
                                start_htcacheclean || log_end_msg 1
                        fi
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
        ;;
        stop)
                if check_htcacheclean ; then
                        log_daemon_msg "Stopping web server" "htcacheclean"
                        stop_htcacheclean
                        log_progress_msg "apache2"
                else
                        log_daemon_msg "Stopping web server" "apache2"
                fi
                if apache_stop; then
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
        ;;
        reload | force-reload)
                if ! $APACHE2CTL configtest > /dev/null 2>&1; then
                    $APACHE2CTL configtest || true
                    log_end_msg 1
                    exit 1
                fi
                log_daemon_msg "Reloading web server config" "apache2"
                if pidof_apache > /dev/null ; then
                    if $APACHE2CTL graceful $2 ; then
                        log_end_msg 0
                    else
                        log_end_msg 1
                    fi
                fi
        ;;
        restart)
                if check_htcacheclean ; then
                        log_daemon_msg "Restarting web server" "htcacheclean"
                        stop_htcacheclean
                        log_progress_msg apache2
                else
                        log_daemon_msg "Restarting web server" "apache2"
                fi
                if ! apache_stop; then
                        log_end_msg 1 || true
                fi
                sleep 10
                if $APACHE2CTL start; then
                        if check_htcacheclean ; then
                                start_htcacheclean || log_end_msg 1
                        fi
                        log_end_msg 0
                else
                        log_end_msg 1
                fi
        ;;
        start-htcacheclean)
                log_daemon_msg "Starting htcacheclean"
                start_htcacheclean || log_end_msg 1
                log_end_msg 0
        ;;
        stop-htcacheclean)
                log_daemon_msg "Stopping htcacheclean"
                        stop_htcacheclean
                        log_end_msg 0
        ;;
        *)
                log_success_msg "Usage: /etc/init.d/apache2 {start|stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean}"
                exit 1
        ;;
esac
```
Die Reload-Section sah zeitweise so aus


```
reload | force-reload)
                 if ! $APACHE2CTL configtest > /dev/null 2>&1; then
                     $APACHE2CTL configtest || true
                     log_end_msg 1
                     exit 1
                 fi
                 log_daemon_msg "Reloading web server config" "apache2"
                 if pidof_apache > /dev/null ; then
/etc/init.d/apache2 stop
sleep(30)
/etc/init.d/apache2 start
#                    if $APACHE2CTL graceful $2 ; then 
#                        log_end_msg 0 
#                    else 
#                        log_end_msg 1 
#                    fi
                 fi
         ;;
```


----------



## Till (4. Aug. 2011)

Versuch mal bitte die Zeile:

if $APACHE2CTL graceful $2 ; then

zu ändern in:

if $APACHE2CTL restart $2 ; then


----------



## celocore (4. Aug. 2011)

Keine Änderung des Arbeitsweise... hmm


----------



## Till (4. Aug. 2011)

Dann fällt mir da erstmal auch nichts weiter ein


----------

