commit:     82305f92b39198151b4c3c5d48a2973dfd043ac9
Author:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 25 00:27:21 2017 +0000
Commit:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
CommitDate: Tue Jul 25 00:38:49 2017 +0000
URL:        https://gitweb.gentoo.org/proj/eselect-php.git/commit/?id=82305f92

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.

 doc/php-fpm.example.init.in.in | 97 +++++++++++++++++++-----------------------
 1 file 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 $?
+}

Reply via email to