summaryrefslogtreecommitdiff
blob: 912a5d86fedffcc58263911592b5c5dac74cd2e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/sbin/openrc-run

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 $?
}

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 )

    # Save this so `echo` doesn't clobber it.
    local exit_code=$?
    [ $exit_code -ne 0 ] && echo "${OUTPUT}" >&2
    eend $exit_code
}