summaryrefslogtreecommitdiff
path: root/www/spawn-fcgi/files/spawnfcgi.sh
blob: 477fce009de6a50102bd3d204de96673e891b77c (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!@RCD_SCRIPTS_SHELL@
#
# $NetBSD: spawnfcgi.sh,v 1.1.1.1 2010/02/08 14:37:54 joerg Exp $
#
# PROVIDE: spawnfcgi
# BEFORE: apache cherokee lighttpd nginx
# REQUIRE: DAEMON

. /etc/rc.subr

name="spawnfcgi"
rcvar=$name
command="@PREFIX@/bin/spawn-fcgi"
start_cmd="spawnfcgi_start"
stop_cmd="spawnfcgi_stop"
status_cmd="spawnfcgi_status"
pidfile_base="@VARBASE@/run/spawnfcgi-"

spawnfcgi_pid()
{
	pidfile=${pidfile_base}$1
	job_command=$(eval echo \$${name}_${job}_command)
	rc_pid=`check_pidfile "$pidfile" $job_command`
}

spawnfcgi_start()
{
	rv=0
	for job in "" $spawnfcgi_jobs; do
		[ -z $job ] && continue
		spawnfcgi_pid $job
		if [ -n "${rc_pid}" ]; then
			echo "${name}/$job already running (pid=${rc_pid})."
			rv=1
			continue
		fi
		job_command=$(eval echo \$${name}_${job}_command)
		job_args=$(eval echo \$${name}_${job}_args)
		job_user=$(eval echo \$${name}_${job}_user)
		job_cwd=$(eval echo \$${name}_${job}_cwd)
		job_socket=$(eval echo \$${name}_${job}_socket)
		job_socket_mode=$(eval echo \$${name}_${job}_socket_mode)
		job_address=$(eval echo \$${name}_${job}_address)
		job_children=$(eval echo \$${name}_${job}_children)
		job_php_children=$(eval echo \$${name}_${job}_php_children)

		if [ -n "${job_php_children}" ]; then
			opt_C="-C"
		else
			opt_C=""
		fi
		if [ -n "${job_children}" ]; then
			opt_F="-F"
		else
			opt_F=""
		fi
		if [ -n "${job_socket_mode}" ]; then
			opt_m="-m"
		else
			opt_m=""
		fi
		if [ -n "${job_socket}" ]; then
			opt_s="-s"
		else
			opt_s=""
		fi
		if [ -n "${job_address}" ]; then
			opt_a="-a"
		else
			opt_a=""
		fi
		if [ -n "${job_port}" ]; then
			opt_p="-p"
		else
			opt_p=""
		fi
		echo "Starting ${name}/$job."
		$command -f ${job_command} \
		    -u ${job_user} \
		    -d ${job_cwd:-/} \
		    $opt_C ${job_php_children} \
		    $opt_F ${job_children} \
		    $opt_s ${job_socket} \
		    $opt_m ${job_socket_mode} \
		    $opt_a ${job_address} \
		    $opt_p ${job_port} \
		    -P ${pidfile_base}${job} -- \
		    ${job_command} ${job_args}
	done
	return $rv
}

spawnfcgi_stop()
{
	rv=0
	for job in "" $spawnfcgi_jobs; do
		[ -z $job ] && continue
		spawnfcgi_pid $job
		if [ -n "${rc_pid}" ]; then
			echo "Stopping ${name}/$job."
			kill -TERM ${rc_pid}
			wait_for_pids ${rc_pid}
		else
			echo "${name}/$job is not running."
			rv=1
		fi
	done
	return $rv
}

spawnfcgi_status()
{
	rv=0
	for job in "" $spawnfcgi_jobs; do
		[ -z $job ] && continue
		spawnfcgi_pid $job
		if [ -n "${rc_pid}" ]; then
			echo "${name}/${job} is running as pid ${rc_pid}."
		else
			echo "${name}/${job} is not running."
			rv=1
		fi
	done
	return $rv
}

load_rc_config $name
run_rc_command $1