mod_php_install.sh: add timeout parameter.

This commit is contained in:
Christoph 2024-04-26 00:24:40 +02:00
parent f9f247aa1d
commit 0d94d23fe3

View File

@ -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