|
Server : Apache System : Linux s1230 5.15.0-139-generic #149~20.04.1 SMP Tue Jul 14 11:21:49 UTC 2026 x86_64 User : p141464 ( 418825) PHP Version : 7.4.33.12 Disable Function : NONE Directory : /usr/local/php/scripts/ |
Upload File : |
#!/bin/bash
PACCOUNT=${SVCNAME//fpm_/}
if [[ ! ${PACCOUNT} =~ ^p[0-9]+$ ]]; then
echo "missing parameters"
exit 1
fi
opcache_path="/home/www/${PACCOUNT}/usr/local/php/extensions/opcache.so"
if [ -f "${opcache_path}" ]; then
sed -i "s|^zend_extension.*opcache.*$|zend_extension = \${PHP_EXTENSIONS_DIR}/opcache.so|" "/etc/php/fpm/${PACCOUNT}/php.ini"
else
sed -i "/^zend_extension.*opcache.*$/d" "/etc/php/fpm/${PACCOUNT}/php.ini"
fi
mkdir -p "/home/www/${PACCOUNT}/etc/php-fpm/"
cp "/etc/php/fpm/${PACCOUNT}/"{php.ini,php_version,opcache_blacklisted_files} "/home/www/${PACCOUNT}/etc/php-fpm/"
if [[ ! -e "/home/www/${PACCOUNT}/etc/php-fpm/READ_BEFORE_CHANGING_INI_FILE.txt" ]]; then
cat > "/home/www/${PACCOUNT}/etc/php-fpm/READ_BEFORE_CHANGING_INI_FILE.txt" <<EOF
# Please edit /etc/php/php.ini not /etc/php-fpm/php.ini
# Individual configurations can only be applied via /etc/php/php.ini and will be automatically merged into the /etc/php-fpm/php.ini
EOF
fi
# prepend defaults.ini if available
if [ -f "/home/www/${PACCOUNT}/usr/local/php/usr/etc/defaults.ini" ]; then
tmp_ini="$(mktemp /tmp/php.XXXXXXXXXX.ini)"
cat "/home/www/${PACCOUNT}/usr/local/php/usr/etc/defaults.ini" "/home/www/${PACCOUNT}/etc/php-fpm/php.ini" > "${tmp_ini}" && \
mv "${tmp_ini}" "/home/www/${PACCOUNT}/etc/php-fpm/php.ini"
fi
echo "extension_dir = /usr/local/php/extensions" >> "/home/www/${PACCOUNT}/etc/php-fpm/php.ini"
chmod 644 "/home/www/${PACCOUNT}/etc/php-fpm/php.ini"
chown -R 1000:1000 "/home/www/${PACCOUNT}/etc/php-fpm/"
setfacl -bnR "/home/www/${PACCOUNT}/etc/php-fpm/"
echo "opcache.blacklist_filename = /etc/php-fpm/opcache_blacklisted_files" >> "/home/www/${PACCOUNT}/etc/php-fpm/php.ini"
# set `session.save_path` to `/tmp` if not set previously
sed -i "s|^session.save_path[ =]*$|session.save_path = /tmp|g" "/home/www/${PACCOUNT}/etc/php-fpm/php.ini"
max_children=$(grep "pm.max_children = " "/etc/php/fpm/${PACCOUNT}/fpm.conf" | awk 'NR==1{print $3}')
uuid=$(uuidgen)
if [[ -f "/etc/php/fpm/${PACCOUNT}/fpm-project-conf.inc" ]]; then
custom_project_fpm=$(cat "/etc/php/fpm/${PACCOUNT}/fpm-project-conf.inc" | sed 's/^/ /')
fi
if [[ -f "/etc/php/fpm/${PACCOUNT}/fpm-global-conf.inc" ]]; then
custom_global_fpm=$(cat "/etc/php/fpm/${PACCOUNT}/fpm-global-conf.inc" | sed 's/^/ /')
fi
cat > "/home/www/${PACCOUNT}/etc/php-fpm/fpm.conf" <<EOF
pid = /tmp/.fpm_${PACCOUNT}.pid
[global]
error_log = /tmp/fpm-process.log
log_level = notice
emergency_restart_threshold = 5
emergency_restart_interval = 1m
process_control_timeout = 10
daemonize = yes
${custom_global_fpm}
[${PACCOUNT}]
prefix = none
listen = /tmp/.fpm_${uuid}.sock
listen.mode = 0666
pm = ondemand
pm.max_children = \${FPM_MAX_CHILDREN}
pm.max_requests = 1024
pm.status_path = /mon_status
ping.path = /mon_ping
request_terminate_timeout = 0
request_slowlog_timeout = 0
catch_workers_output = no
env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/php/usr/bin
env[OPENSSL_CONF] = /etc/ssl/openssl.cnf
env[MAGICK_C0DER_MODULE_PATH] = \${MAGICK_C0DER_MODULE_PATH}
env[LO_PATH] = \${LO_PATH}
env[GCONV_PATH] = \${GCONV_PATH}
${custom_project_fpm}
EOF
pkill -9 -u "${PACCOUNT}" -f "php-fpm: "
rm -f "/home/www/${PACCOUNT}/tmp/.fpm_"*.sock
ln -fs "/home/www/${PACCOUNT}/tmp/.fpm_${PACCOUNT}.pid" "/var/run/fpm_${PACCOUNT}.pid"
ln -fs "/home/www/${PACCOUNT}/tmp/.fpm_${uuid}.sock" "/var/run/fpm_${PACCOUNT}.sock"
ln -fs "/home/www/${PACCOUNT}/tmp/.fpm_${uuid}.sock" "/var/run/fpm_${PACCOUNT}_control.sock"
FPMLOG="/home/www/${PACCOUNT}/tmp/fpm-process.log"
if [ -L "${FPMLOG}" ]; then
rm -f "${FPMLOG}"
elif [ -f "${FPMLOG}" ]; then
log_lines=$(grep -c "^" "${FPMLOG}")
if [[ ${log_lines:-0} -gt 1200 ]]; then
rm -f "${FPMLOG}.new"
tail -n 1000 "${FPMLOG}" > "${FPMLOG}.new"
mv "${FPMLOG}.new" "${FPMLOG}"
fi
fi
touch "${FPMLOG}"
chown -h "${PACCOUNT}:users" "${FPMLOG}"
export FPM_MAX_CHILDREN=${max_children:=4}
exec /usr/bin/chroot --userspec "${PACCOUNT}:users" "/home/www/${PACCOUNT}" \
/usr/local/php/sbin/php-fpm -y /etc/php-fpm/fpm.conf \
-c /etc/php-fpm/php.ini