summaryrefslogtreecommitdiff
blob: a0c7ad6da599c2827a94482a6379983a4bd79d9e (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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/sbin/openrc-run
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

PROGNAME=${SVCNAME#*.}

UWSGI_EXEC=/usr/bin/uwsgi
if [ "${SVCNAME}" = "uwsgi" ]; then
	PIDPATH=/var/run/uwsgi
else
	PIDPATH="/var/run/uwsgi_${PROGNAME}"
fi
PIDFILE="${PIDPATH}/${PROGNAME}.pid"

extra_started_commands="${opts} reload stats"

depend() {
	need net
}

start_emperor() {
	local OPTIONS
	OPTIONS="--daemonize"

	if [ -n "${UWSGI_LOG_FILE}" ]; then
		OPTIONS="${OPTIONS} ${UWSGI_LOG_FILE}"
	else
		OPTIONS="${OPTIONS} /dev/null --disable-logging"
	fi

	[ -z "${UWSGI_DIR}" ] && UWSGI_DIR="/"
	[ -z "${UWSGI_USER}" ] && UWSGI_USER="root"
	[ -z "${UWSGI_GROUP}" ] && UWSGI_GROUP="root"

	if [ -n "${UWSGI_EXTRA_OPTIONS}" ]; then
		OPTIONS="${OPTIONS} ${UWSGI_EXTRA_OPTIONS}"
	fi

	ebegin "Starting uWSGI emperor"
	checkpath -d -m 0770 -o "${UWSGI_USER}":"${UWSGI_EMPEROR_GROUP:-${UWSGI_GROUP}}" "${PIDPATH}"

	cd "${UWSGI_DIR}" && \
	start-stop-daemon --start --user "${UWSGI_USER}" --exec "${UWSGI_EXEC}" \
		--group ${UWSGI_EMPEROR_GROUP:-${UWSGI_GROUP}} \
		-- --emperor "${UWSGI_EMPEROR_PATH}" ${OPTIONS} --pidfile "${PIDFILE}"
	return $?
}

start_app() {
	local OPTIONS
	OPTIONS="--master --daemonize"

	if [ -n "${UWSGI_LOG_FILE}" ]; then
		OPTIONS="${OPTIONS} ${UWSGI_LOG_FILE}"
	else
		OPTIONS="${OPTIONS} /dev/null --disable-logging"
	fi

	[ -z "${UWSGI_DIR}" ] && UWSGI_DIR="/"
	[ -z "${UWSGI_USER}" ] && UWSGI_USER="root"
	[ -z "${UWSGI_GROUP}" ] && UWSGI_GROUP="root"

	if [ -n "${UWSGI_EXTRA_OPTIONS}" ]; then
		OPTIONS="${OPTIONS} ${UWSGI_EXTRA_OPTIONS}"
	fi

	if [ "${UWSGI_THREADS}" = "1" ]; then
		OPTIONS="${OPTIONS} --enable-threads"
	fi

	if [ -n "${UWSGI_SOCKET}" ]; then
		OPTIONS="${OPTIONS} --socket ${UWSGI_SOCKET}"
	fi

	if [ -n "${UWSGI_PROCESSES}" ]; then
		OPTIONS="${OPTIONS} --processes ${UWSGI_PROCESSES}"
	fi

	if [ -n "${UWSGI_CHROOT}" ]; then
		OPTIONS="${OPTIONS} --chroot ${UWSGI_CHROOT}"
	fi

	if [ -n "${UWSGI_PROGRAM}" ]; then
		OPTIONS="${OPTIONS} --fileserve-mode ${UWSGI_PROGRAM}"
	fi

	if [ -n "${UWSGI_XML_CONFIG}" ]; then
		OPTIONS="${OPTIONS} --xmlconfig ${UWSGI_XML_CONFIG}"
	fi

	ebegin "Starting uWSGI application ${PROGNAME}"
	checkpath -d -m 0750 -o "${UWSGI_USER}":"${UWSGI_GROUP}" "${PIDPATH}"

	cd "${UWSGI_DIR}" && \
	start-stop-daemon --start --user "${UWSGI_USER}" --group "${UWSGI_GROUP}" \
		--exec "${UWSGI_EXEC}" -- ${OPTIONS} --pidfile "${PIDFILE}"
	return $?
}

start() {
	if [ -n "${UWSGI_EMPEROR_PATH}" ]; then
		start_emperor
		eend $?
	else
		if [ "${SVCNAME}" = "uwsgi" ]; then
			eerror "You are not supposed to run this script directly unless you"
			eerror "want to run in Emperor mode. In that case please set the UWSGI_EMPEROR_PATH."
			eerror "Otherwise create a symlink for the uwsgi application you want to run as well as"
			eerror "a copy of the configuration file and modify it appropriately like so..."
			eerror
			eerror "  ln -s uwsgi /etc/init.d/uwsgi.trac"
			eerror "  cp /etc/conf.d/uwsgi /etc/conf.d/uwsgi.trac"
			eerror "  nano /etc/conf.d/uwsgi.trac"
			eerror
			return 1
		else
			start_app
			eend $?
		fi
	fi
}

stop() {
	if [ -n "${UWSGI_EMPEROR_PATH}" ]; then
		ebegin "Stopping uWSGI emperor"
	else
		ebegin "Stopping uWSGI application ${PROGNAME}"
	fi
	start-stop-daemon --stop --signal QUIT --pidfile "${PIDFILE}"
	eend $?
}

reload() {
	ebegin "Reloading uWSGI"
	start-stop-daemon --signal HUP --pidfile "${PIDFILE}"
	eend $?
}

stats() {
	ebegin "Logging uWSGI statistics"
	start-stop-daemon --signal USR1 --pidfile "${PIDFILE}"
	eend $?
}