diff --git a/mod_php_install.sh b/mod_php_install.sh index 4a9016d..72474fa 100755 --- a/mod_php_install.sh +++ b/mod_php_install.sh @@ -31,58 +31,6 @@ _LEGACY_SQL_FUNCTION_SUPPORT=no _SYMLINK_PHP=no _SYMLINK_PHP_MAIN_VERSION=yes -_MEMORY_LIMIT="512M" -_MAX_EXECUTION_TIME=180 -_MAX_INPUT_TIME=180 -_UPLOAD_MAX_FILESIZE="128M" -_POST_MAX_SIZE="128M" - -_ZLIB_OUTPUT_COMPRESSION="On" - -# Default Settings opcache extension -# -DEFAULT_OPCACHE_ENABLE=1 -DEFAULT_OPCACHE_ENABLE_CLI=1 -#DEFAULT_OPCACHE_MEMORY_CONSUMPTION=128 -DEFAULT_OPCACHE_MEMORY_CONSUMPTION=512 -DEFAULT_OPCACHE_INTERNED_STRINGS_BUFFER=48 -#DEFAULT_OPCACHE_MAX_ACCELERATED_FILES=10000 -DEFAULT_OPCACHE_MAX_ACCELERATED_FILES=60000 -#DEFAULT_OPCACHE_VALIDATE_TIMESTAMPS=1 -DEFAULT_OPCACHE_VALIDATE_TIMESTAMPS=0 - -DEFAULT_OPCACHE_CONSISTENCY_CHECKS=0 - -DEFAULT_OPCACHE_REVALIDATE_FREQ=60 -if [[ -d "/var/log/apache2" ]] ; then - DEFAULT_OPCACHE_ERROR_LOG="/var/log/apache2/opcache_errors.log" -elif [[ -d "/var/log/nginx" ]]; then - DEFAULT_OPCACHE_ERROR_LOG="/var/log/nginx/opcache_errors.log" -else - DEFAULT_OPCACHE_ERROR_LOG="" -fi - -# Default Settings apc extension -# -DEFAULT_APC_ENABLE_CLI=1 -DEFAULT_APC_SHM_SIZE="32M" -DEFAULT_APC_STAT=1 -DEFAULT_APCU_STAT=1 -DEFAULT_APC_BY_DEFAULT=1 -DEFAULT_APC_SMART=0 - -_SKIP_UPDATE_DB=yes - -_CRONTAB_BAKUP_FILE="$(mktemp)" - -_VSERVER_GUEST=no - -# Array oft existing FPM pool definitions -# -declare -a php_fpm_pool_definition_file_arr=() - -_backup_date="$(date +%Y%m%d-%H%M)" - ## --- Some functions ## --- @@ -190,6 +138,103 @@ detect_os_1 () { ## --- ## --- END: functions +## --- Some (default) Variables +## --- + +_MEMORY_LIMIT="512M" + +# MAX_EXECUTION_TIME +# +# Try to set an adequate default value +# +declare -i PROXY_TIMEOUT=0 +if [[ -f "/usr/local/apache2/conf/httpd.conf" ]]; then + _HTTPD_CONF_FILE="/usr/local/apache2/conf/httpd.conf" +elif [[ -f "/etc/apache2/apache2.conf" ]]; then + _HTTPD_CONF_FILE="/etc/apache2/apache2.conf" +else + _HTTPD_CONF_FILE='' +fi + +if [[ -f "${_HTTPD_CONF_FILE}" ]] && $(grep -q -i -E "^\s*Timeout\s+" "${_HTTPD_CONF_FILE}") ; then + _TIMEOUT="$(grep -i -E "^\s*timeout\s+" "${_HTTPD_CONF_FILE}"| awk '{print$2}' | head -1)" +else + _TIMEOUT=60 +fi +if [[ -f "${_HTTPD_CONF_FILE}" ]] && $(grep -q -i -E "^\s*ProxyTimeout\s+" "${_HTTPD_CONF_FILE}") ; then + PROXY_TIMEOUT="$(grep -i -E "^\s*ProxyTimeout\s+" "${_HTTPD_CONF_FILE}"| awk '{print$2}' | head -1)" +else + PROXY_TIMEOUT=${_TIMEOUT} +fi + +_MAX_EXECUTION_TIME=180 +if $(is_int "$PROXY_TIMEOUT") ; then + + if [[ $PROXY_TIMEOUT -gt 180 ]] ; then + _MAX_EXECUTION_TIME=$PROXY_TIMEOUT + fi +else + PROXY_TIMEOUT=$_MAX_EXECUTION_TIME +fi + +APACHE_FCGID_MAX_REQUESTS_PER_PROCESS='' +if [[ -f "${_HTTPD_CONF_FILE}" ]] && $(grep -q -i -E "^\s*FcgidMaxRequestsPerProcess\s+" "${_HTTPD_CONF_FILE}") ; then + APACHE_FCGID_MAX_REQUESTS_PER_PROCESS="$(grep -i -E "^\s*FcgidMaxRequestsPerProcess\s+" "${_HTTPD_CONF_FILE}"| awk '{print$2}' | head -1)" +fi + + +_MAX_INPUT_TIME=180 +_UPLOAD_MAX_FILESIZE="128M" +_POST_MAX_SIZE="128M" + +_ZLIB_OUTPUT_COMPRESSION="On" + +# Default Settings opcache extension +# +DEFAULT_OPCACHE_ENABLE=1 +DEFAULT_OPCACHE_ENABLE_CLI=1 +#DEFAULT_OPCACHE_MEMORY_CONSUMPTION=128 +DEFAULT_OPCACHE_MEMORY_CONSUMPTION=512 +DEFAULT_OPCACHE_INTERNED_STRINGS_BUFFER=48 +#DEFAULT_OPCACHE_MAX_ACCELERATED_FILES=10000 +DEFAULT_OPCACHE_MAX_ACCELERATED_FILES=60000 +#DEFAULT_OPCACHE_VALIDATE_TIMESTAMPS=1 +DEFAULT_OPCACHE_VALIDATE_TIMESTAMPS=0 + +DEFAULT_OPCACHE_CONSISTENCY_CHECKS=0 + +DEFAULT_OPCACHE_REVALIDATE_FREQ=60 +if [[ -d "/var/log/apache2" ]] ; then + DEFAULT_OPCACHE_ERROR_LOG="/var/log/apache2/opcache_errors.log" +elif [[ -d "/var/log/nginx" ]]; then + DEFAULT_OPCACHE_ERROR_LOG="/var/log/nginx/opcache_errors.log" +else + DEFAULT_OPCACHE_ERROR_LOG="" +fi + +# Default Settings apc extension +# +DEFAULT_APC_ENABLE_CLI=1 +DEFAULT_APC_SHM_SIZE="32M" +DEFAULT_APC_STAT=1 +DEFAULT_APCU_STAT=1 +DEFAULT_APC_BY_DEFAULT=1 +DEFAULT_APC_SMART=0 + +_SKIP_UPDATE_DB=yes + +_CRONTAB_BAKUP_FILE="$(mktemp)" + +_VSERVER_GUEST=no + +# Array oft existing FPM pool definitions +# +declare -a php_fpm_pool_definition_file_arr=() + +_backup_date="$(date +%Y%m%d-%H%M)" +## --- +## --- END: Variables + ## -------------------------------------------------- @@ -363,7 +408,7 @@ fi ## -------------------------------------------------- -clear +#clear echo echo -e "\033[21G\033[32mInstallation PHP \033[m" echo @@ -630,7 +675,23 @@ done if [ -f "/usr/local/php-${PHP_MAIN_VERSION}/etc/php.ini" ]; then __max_execution_time=$(grep -e "^\s*max_execution_time" /usr/local/php-${PHP_MAIN_VERSION}/etc/php.ini | awk '{print$3}') if [ -n "$__max_execution_time" ] ; then - _MAX_EXECUTION_TIME=$__max_execution_time + + if ! $(is_int "$__max_execution_time") ; then + # remove trailling character (usakky it is 's' for seconds + # + len=${#__max_execution_time} + __max_execution_time="${__max_execution_time::len-1}" + + if $(is_int "$__max_execution_time") ; then + + if [[ ${__max_execution_time} -gt ${_MAX_EXECUTION_TIME} ]] ; then + _MAX_EXECUTION_TIME=$__max_execution_time + fi + + fi + + fi + fi fi @@ -801,8 +862,14 @@ if $WITH_PHP_FPM_SUPPORT ; then DEFAULT_FPM_POOL_START_SERVER=15 DEFAULT_FPM_POOL_MIN_SPARE=6 DEFAULT_FPM_POOL_MAX_SPARE=24 - DEFAULT_FPM_POOL_MAX_REQUESTS=500 DEFAULT_FPM_POOL_MAX_CHILDREN=256 + if [[ -n "${APACHE_FCGID_MAX_REQUESTS_PER_PROCESS}" ]] ; then + DEFAULT_FPM_POOL_MAX_REQUESTS="${APACHE_FCGID_MAX_REQUESTS_PER_PROCESS}" + else + DEFAULT_FPM_POOL_MAX_REQUESTS=499 + fi + DEFAULT_FPM_POOL_TERMINATE_TIMEOUT="$(expr $PROXY_TIMEOUT + 1)" + # If php pool definitions exists on installed php, then take that value # @@ -828,12 +895,12 @@ if $WITH_PHP_FPM_SUPPORT ; then fi fi - if [[ -f "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/www-${PHP_MAIN_VERSION}.php-fpm.conf" ]] ; then - __pm_max_requests=$(grep -e "^\s*pm.max_requests" "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/www-${PHP_MAIN_VERSION}.php-fpm.conf" | awk '{print$3}') - if [[ -n "$__pm_max_requests" ]] ; then - DEFAULT_FPM_POOL_MAX_REQUESTS=$__pm_max_requests - fi - fi + #if [[ -f "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/www-${PHP_MAIN_VERSION}.php-fpm.conf" ]] ; then + # __pm_max_requests=$(grep -e "^\s*pm.max_requests" "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/www-${PHP_MAIN_VERSION}.php-fpm.conf" | awk '{print$3}') + # if [[ -n "$__pm_max_requests" ]] ; then + # DEFAULT_FPM_POOL_MAX_REQUESTS=$__pm_max_requests + # fi + #fi if [[ -f "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/www-${PHP_MAIN_VERSION}.php-fpm.conf" ]] ; then __pm_max_children=$(grep -e "^\s*pm.max_children" "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/www-${PHP_MAIN_VERSION}.php-fpm.conf" | awk '{print$3}') @@ -842,6 +909,34 @@ if $WITH_PHP_FPM_SUPPORT ; then fi fi + + # Parameter request_terminate_timeout + # + if [[ -f "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/www-${PHP_MAIN_VERSION}.php-fpm.conf" ]] ; then + __request_terminate_timeout=$(grep -e "^\s*request_terminate_timeout" "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/www-${PHP_MAIN_VERSION}.php-fpm.conf" | awk '{print$3}') + + if [ -n "$__request_terminate_timeout" ] ; then + + if ! $(is_int "$__request_terminate_timeout") ; then + # remove trailling character (usakky it is 's' for seconds + # + len=${#__request_terminate_timeout} + __request_terminate_timeout="${__request_terminate_timeout::len-1}" + + fi + + if $(is_int "$__request_terminate_timeout") ; then + + if [[ ${__request_terminate_timeout} -gt ${PROXY_TIMEOUT} ]] ; then + DEFAULT_FPM_POOL_TERMINATE_TIMEOUT=${__request_terminate_timeout} + fi + + fi + + fi + + fi + # Get existing FPM pool definitions # for _file in $(ls "/usr/local/php-${PHP_MAIN_VERSION}/etc/fpm.d/") ; do @@ -959,6 +1054,7 @@ if $WITH_PHP_FPM_SUPPORT ; then done FPM_POOL_MAX_CHILDREN="" + DEFAULT_FPM_POOL_MAX_CHILDREN=$(expr $FPM_POOL_MIN_SPARE + $DEFAULT_FPM_POOL_MAX_CHILDREN + 5) while [[ "X$FPM_POOL_MAX_CHILDREN" = "X" ]]; do echononl "pm.max_children: [$DEFAULT_FPM_POOL_MAX_CHILDREN] " read FPM_POOL_MAX_CHILDREN @@ -973,6 +1069,21 @@ if $WITH_PHP_FPM_SUPPORT ; then fi done + FPM_POOL_TERMINATE_TIMEOUT="" + while [[ "X$FPM_POOL_TERMINATE_TIMEOUT" = "X" ]]; do + echononl "request_terminate_timeout: [$DEFAULT_FPM_POOL_TERMINATE_TIMEOUT] " + read FPM_POOL_TERMINATE_TIMEOUT + if [ "X$FPM_POOL_TERMINATE_TIMEOUT" = "X" ]; then + FPM_POOL_TERMINATE_TIMEOUT=$DEFAULT_FPM_POOL_TERMINATE_TIMEOUT + break + fi + if ! is_int $FPM_POOL_TERMINATE_TIMEOUT ; then + warn "Wrong value for pm.max_children was given (mus be an integer). Reenter again" + FPM_POOL_TERMINATE_TIMEOUT="" + continue + fi + done + fi @@ -1827,7 +1938,6 @@ FPM_DEFAULT_POOL_ACCESS_LOG="${FPM_LOG_DIR}/${FPM_DEFAULT_POOL}-access.log" FPM_DEFAULT_POOL_SLOW_LOG="${FPM_LOG_DIR}/${FPM_DEFAULT_POOL}-slow.log" FPM_DEFAULT_POOL_ACCESS_FORMAT="\"%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%\"" -FPM_DEFAULT_POOL_TERMINATE_TIMEOUT="`expr $MAX_EXECUTION_TIME + 1`s" FPM_ULIMIT_MAX_FILES=`su -c "ulimit -H -n" -s /bin/bash $_PHP_FPM_USER` @@ -2178,6 +2288,7 @@ if $WITH_PHP_FPM_SUPPORT ; then echo " pm.max_spare_servers..............: $FPM_POOL_MAX_SPARE" echo " pm.max_children...................: $FPM_POOL_MAX_CHILDREN" echo " pm.max_requests...................: $FPM_POOL_MAX_REQUESTS" + echo " request_terminate_timeout.........: $FPM_POOL_TERMINATE_TIMEOUT" @@ -4997,7 +5108,7 @@ request_slowlog_timeout = 10s ; does not stop script execution for some reason. A value of '0' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 -request_terminate_timeout = $FPM_DEFAULT_POOL_TERMINATE_TIMEOUT +request_terminate_timeout = $FPM_POOL_TERMINATE_TIMEOUT ; The timeout set by 'request_terminate_timeout' ini option is not engaged after ; application calls 'fastcgi_finish_request' or when application has finished and @@ -5194,6 +5305,18 @@ EOF fi echo "" + key="request_terminate_timeout" + value="$FPM_POOL_TERMINATE_TIMEOUT" + echononl "\tPHP FPM Pool - Set Definition '${key}'.." + sed -i -E "s/^([[:blank:]]*${key}[[:blank:]]*=[[:blank:]]*).*/\1${value}/" \ + ${PREFIX_PHP}/etc/${FPM_POOL_CONF_DIR}/${FPM_DEFAULT_POOL}.php-fpm.conf + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi + echo "" + fi fi