]> Frank Brehm's Git Trees - config/berta/etc.git/commitdiff
saving uncommitted changes in /etc prior to emerge run
authorFrank Brehm <frank@brehm-online.com>
Mon, 8 Jan 2018 14:36:51 +0000 (15:36 +0100)
committerFrank Brehm <frank@brehm-online.com>
Mon, 8 Jan 2018 14:36:51 +0000 (15:36 +0100)
init.d/php-fpm

index 6369e9f913d1bc18eae98947e517b9dee031556b..da4cd507ba24bac4f350de02e74f12f7a70d1955 100755 (executable)
@@ -1,71 +1,77 @@
 #!/sbin/openrc-run
 
-extra_started_commands="reload"
-extra_commands="configtest"
+#
+# 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
 
-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="/etc/php/fpm-${PHPSLOT}/php-fpm.conf"
-       PHP_FPM_BIN="/usr/lib/${PHPSLOT}/bin/php-fpm"
-}
+PHP_FPM_CONF="/etc/php/fpm-${PHP_SLOT}/php-fpm.conf"
 
-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 $?
-}
+command="/usr/lib64/${PHP_SLOT}/bin/php-fpm"
+pidfile="/run/php-fpm-${PHP_SLOT}.pid"
 
-stop() {
-        ebegin "Stopping PHP FastCGI Process Manager"
-       set_phpvars
-        start-stop-daemon --signal QUIT \
-                         --stop \
-                         --exec "${PHP_FPM_BIN}" \
-                         --pidfile "${PHP_FPM_PID}"
-        eend $?
-}
+# 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"
 
-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() {
+    # If this isn't a restart, make sure that the user's config isn't
+    # busted before we try to start the daemon (this will produce
+    # better error messages than if we just try to start it blindly).
+    #
+    # If, on the other hand, this *is* a restart, then the stop_pre
+    # action will have ensured that the config is usable and we don't
+    # need to do that again.
+    if [ "${RC_CMD}" != "restart" ] ; then
+        configtest || return $?
+    fi
+}
+
+stop_pre() {
+    # If this is a restart, check to make sure the user's config
+    # isn't busted before we stop the running daemon.
+    if [ "${RC_CMD}" = "restart" ] ; then
+        configtest || return $?
+    fi
+}
+
+reload() {
+    configtest || return $?
+    ebegin "Reloading PHP FastCGI Process Manager"
+    start-stop-daemon --signal USR2 --pidfile "${pidfile}"
+    eend $?
+}