aboutsummaryrefslogtreecommitdiff
path: root/www/uwsgi/files/uwsgi.in
blob: 248656dc9f1d38d300e965e388dd44ef947c15a9 (plain) (blame)
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: uwsgi
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable uwsgi:
#
# uwsgi_enable (bool):		Set it to "YES" to enable uwsgi
#				Default is "NO".
# uwsgi_socket (path/str):	Set the path to the uwsgi unix socket
#				Default is /tmp/uwsgi.sock.
# uwsgi_socket_mode (int):	Set the mode of the socket.
#				Default is 660.
# uwsgi_socket_owner (str):	Set the owner of the socket.
#				Default is uwsgi:www.
# uwsgi_emperor (bool):		Set it to "YES" to run uwsgi in emperor mode
#				Default is "NO".
# uwsgi_configfile (path):	Set the path to the config file
#				Default is %%PREFIX%%/etc/uwsgi/uwsgi.ini.
# uwsgi_vassals_dir (path):	Set the path to the vassals directory
#				Default is %%PREFIX%%/etc/uwsgi/vassals.
# uwsgi_logfile (path):		Set the path to the uwsgi log file
#				Default is /var/log/uwsgi.log.
# uwsgi_pidfile (path):		Set the path to the uwsgi pid file
#				Default is /var/run/uwsgi.pid.
# uwsgi_uid (int):		Set the UID of the process to run with
#				Default is uwsgi.
# uwsgi_gid (int):		Set the GID of the process to run with
#				Default is uwsgi.
# uwsgi_flags (str):		Set the uwsgi command line arguments
#				Default is "-L".
# uwsgi_procname (str):		Define to "uWSGI" if you start uwsgi with
#				--auto-procname option.
#
# If you would like to have multiple uWSGI instances running, you can
# define multiple profiles:
#
# uwsgi_profiles (str):		Set the list of uwsgi profiles
#				Default is "".
#
# For each profile you can then define different options (except for
# uwsgi_enable) using the syntax uwsgi_<profile>_<option>

. /etc/rc.subr

name="uwsgi"
rcvar=uwsgi_enable

load_rc_config $name

command=%%PREFIX%%/bin/uwsgi-%%PYTHON_VER%%

: ${uwsgi_enable="NO"}
: ${uwsgi_socket="/tmp/${name}.sock"}
: ${uwsgi_socket_mode="660"}
: ${uwsgi_socket_owner="uwsgi:www"}
: ${uwsgi_configfile="%%PREFIX%%/etc/uwsgi/uwsgi.ini"}
: ${uwsgi_profiles=""}
: ${uwsgi_logfile="/var/log/${name}.log"}
: ${uwsgi_pidfile="/var/run/${name}.pid"}
: ${uwsgi_uid="uwsgi"}
: ${uwsgi_gid="uwsgi"}
: ${uwsgi_flags="-L"}
: ${uwsgi_emperor="NO"}
: ${uwsgi_vassals_dir="%%PREFIX%%/etc/uwsgi/vassals"}

is_uwsgi_profile() {
	local profile

	for profile in $uwsgi_profiles; do
		if [ "$profile" = "$1" ]; then
			return 0
		fi
	done

	return 1
}

if [ -n "${uwsgi_profiles}" ]; then
	if [ -n "$2" ]; then
		profile="$2"
		if ! is_uwsgi_profile $profile; then
			echo "$0: no such profile defined in uwsgi_profiles."
		        exit 1
		fi
		eval uwsgi_socket=\${uwsgi_${profile}_socket:-"/tmp/${name}-${profile}.sock"}
		eval uwsgi_socket_mode=\${uwsgi_${profile}_socket_mode:-${uwsgi_socket_mode}}
		eval uwsgi_socket_owner=\${uwsgi_${profile}_socket_owner:-${uwsgi_socket_owner}}
		eval uwsgi_logfile=\${uwsgi_${profile}_logfile:-"/var/log/${name}-${profile}.log"}
		eval uwsgi_pidfile=\${uwsgi_${profile}_pidfile:-"/var/run/${name}-${profile}.pid"}
		eval uwsgi_uid=\${uwsgi_${profile}_uid:-"${uwsgi_uid}"}
		eval uwsgi_gid=\${uwsgi_${profile}_gid:-"${uwsgi_gid}"}
		eval uwsgi_flags=\${uwsgi_${profile}_flags:-"${uwsgi_flags}"}
		eval uwsgi_procname=\${uwsgi_${profile}_procname:-"${uwsgi_procname}"}
		eval uwsgi_emperor=\${uwsgi_${profile}_emperor:-"${uwsgi_emperor}"}
		eval uwsgi_vassals_dir=\${uwsgi_${profile}_vassals_dir:-"${uwsgi_vassals_dir}"}
		eval uwsgi_configfile=\${uwsgi_${profile}_configfile:-"${uwsgi_configfile}"}
	elif [ -n "$1" ]; then
		for profile in ${uwsgi_profiles}; do
			echo "Processing ${name} profile: ${profile}"
			%%PREFIX%%/etc/rc.d/uwsgi $1 ${profile}
		done
		exit 0
	fi
fi

pidfile=${uwsgi_pidfile}
start_precmd=start_precmd
stop_postcmd=stop_postcmd
reload_precmd=reload_precmd
brutalreload_cmd=brutalreload_cmd
sig_stop="INT"
extra_commands="reload brutalreload"
procname=${uwsgi_procname}

start_precmd()
{
	rc_flags=""
	if [ -e ${uwsgi_configfile} ]; then
		rc_flags="--ini ${uwsgi_configfile} "
	fi

	if checkyesno uwsgi_emperor; then
		echo "Running uWSGI as Emperor. Vassals loaded from "$uwsgi_vassals_dir
		required_dirs=${uwsgi_vassals_dir}
		rc_flags=${rc_flags}"--emperor-pidfile ${uwsgi_pidfile} -d ${uwsgi_logfile} --emperor ${uwsgi_vassals_dir}"
		rc_flags=${rc_flags}" --vassals-set uid=${uwsgi_uid} --vassals-set gid=${uwsgi_gid}"
		rc_flags=${rc_flags}" --vassals-set chmod-socket=${uwsgi_socket_mode} --vassals-set chown-socket=${uwsgi_socket_owner}"
	else
		rc_flags=${rc_flags}"--master  --uid ${uwsgi_uid} --gid ${uwsgi_gid} --pidfile ${uwsgi_pidfile} -d ${uwsgi_logfile}"
		rc_flags=${rc_flags}" -s ${uwsgi_socket} --chmod-socket=${uwsgi_socket_mode} --chown-socket=${uwsgi_socket_owner}"
	fi

	rc_flags=${rc_flags}" ${uwsgi_flags}"
}

stop_postcmd()
{
	rm -f ${uwsgi_pidfile} ${uwsgi_socket}
}

reload_precmd()
{
	echo "Gracefully reloading ${name} without closing the main sockets."
}

brutalreload_cmd()
{
	echo "Reloading ${name} without closing the main sockets."

	reload_precmd=""
	sig_reload="TERM"
	run_rc_command ${rc_prefix}reload $rc_extra_args || return 1
}

run_rc_command "$1"