diff options
author | 2017-07-24 20:27:21 -0400 | |
---|---|---|
committer | 2017-07-24 20:38:49 -0400 | |
commit | 82305f92b39198151b4c3c5d48a2973dfd043ac9 (patch) | |
tree | 1ce4c398294cd0e0ce4fc4143480ccef17670f34 | |
parent | Add intermediate file doc/php-fpm.example.init.in to gitignore. (diff) | |
download | eselect-php-82305f92b39198151b4c3c5d48a2973dfd043ac9.tar.gz eselect-php-82305f92b39198151b4c3c5d48a2973dfd043ac9.tar.bz2 eselect-php-82305f92b39198151b4c3c5d48a2973dfd043ac9.zip |
Rewrite the php-fpm init script to be more declarative.
Modern OpenRC can start/stop a well-behaved daemon on its own,
provided the right command and parameters. This commit updates the
init script to use those OpenRC variables like "command",
"command_args", and "pidfile", and the resulting init script is much
more concise.
-rw-r--r-- | doc/php-fpm.example.init.in.in | 97 |
1 files changed, 43 insertions, 54 deletions
diff --git a/doc/php-fpm.example.init.in.in b/doc/php-fpm.example.init.in.in index 912a5d8..add56b4 100644 --- a/doc/php-fpm.example.init.in.in +++ b/doc/php-fpm.example.init.in.in @@ -1,71 +1,60 @@ #!/sbin/openrc-run +# +# We support both slot-agnostic and slotted versions of the init +# script. The slotted versions would be named something like +# php-fpm-php7.1, and PHP_SLOT below would be set to "php7.1". But we +# also support a general init script named "php-fpm" that uses +# whatever the currently-eselected fpm implementation is. In that +# case, PHP_SLOT winds up set to "php-fpm" and we need to get the +# actual slot by querying eselect. +# +# An open question is, what should we do if the user has both a +# slot-agnostic and slotted init script, which happen to point to the +# same slot? In other words, if the user has a php-fpm init script and +# slot php7.1 eselected, but also a php-fpm-php7.1 init script. Should +# they manage the same instance? I think so... +# +PHP_SLOT="${SVCNAME#php-fpm-}" +if [ "${PHP_SLOT}" = "php-fpm" ] ; then + PHP_SLOT="$(eselect php show fpm)" +fi + +PHP_FPM_CONF="@SYSCONFDIR@/php/fpm-${PHP_SLOT}/php-fpm.conf" + +command="@LIBDIR@/${PHP_SLOT}/bin/php-fpm" +pidfile="/run/php-fpm-${PHP_SLOT}.pid" + +# Force the daemon into the background and make it use our pid file, +# regardless of what the config file says. +command_args="--fpm-config ${PHP_FPM_CONF} --pid ${pidfile} --daemonize" extra_started_commands="reload" extra_commands="configtest" -set_phpvars() { - PHPSLOT="${SVCNAME#php-fpm-}" - PHP_FPM_PID="/run/php-fpm-${PHPSLOT}.pid" - if [ "${PHPSLOT}" = "php-fpm" ] ; then - PHPSLOT="$(eselect php show fpm)" - PHP_FPM_PID="/run/php-fpm.pid" - fi - - PHP_FPM_CONF="@SYSCONFDIR@/php/fpm-${PHPSLOT}/php-fpm.conf" - PHP_FPM_BIN="@LIBDIR@/${PHPSLOT}/bin/php-fpm" -} - -start() { - # If configtest fails, we don't have to sit around for five - # seconds waiting for a pid to show up. - configtest || return $? - ebegin "Starting PHP FastCGI Process Manager" - set_phpvars - start-stop-daemon --start --pidfile "${PHP_FPM_PID}" \ - --exec "${PHP_FPM_BIN}" \ - ${PHP_FPM_UMASK:+--umask ${PHP_FPM_UMASK}} \ - -- \ - --fpm-config "${PHP_FPM_CONF}" \ - --pid "${PHP_FPM_PID}" - local i=0 - local timeout=5 - while [ ! -f "${PHP_FPM_PID}" ] && [ $i -le $timeout ]; do - sleep 1 - i=$(($i + 1)) - done - - [ $timeout -gt $i ] - eend $? -} - -stop() { - ebegin "Stopping PHP FastCGI Process Manager" - set_phpvars - start-stop-daemon --signal QUIT \ - --stop \ - --exec "${PHP_FPM_BIN}" \ - --pidfile "${PHP_FPM_PID}" - eend $? -} - -reload() { - configtest || return $? - ebegin "Reloading PHP FastCGI Process Manager" - set_phpvars - [ -f "${PHP_FPM_PID}" ] && kill -USR2 $(cat "${PHP_FPM_PID}") - eend $? -} +# Wait five seconds after starting for the pidfile to show up. +start_stop_daemon_args="--wait 5000 ${PHP_FPM_UMASK:+--umask ${PHP_FPM_UMASK}}" configtest() { ebegin "Testing PHP FastCGI Process Manager configuration" - set_phpvars + # Hide the "test is successful" message (which goes to stderr) if # the test passed, but show the entire output if the test failed # because it may contain hints about the problem. - OUTPUT=$( "${PHP_FPM_BIN}" --fpm-config "${PHP_FPM_CONF}" --test 2>&1 ) + OUTPUT=$( ${command} ${command_args} --test 2>&1 ) # Save this so `echo` doesn't clobber it. local exit_code=$? [ $exit_code -ne 0 ] && echo "${OUTPUT}" >&2 eend $exit_code } + +start_pre() { + configtest || return $? +} + +reload() { + configtest || return $? + ebegin "Reloading PHP FastCGI Process Manager" + start-stop-daemon --signal USR2 --pidfile "${pidfile}" + eend $? +} |