forked from tornadoweb/tornado
/
debian-multicore-init.d
109 lines (93 loc) · 2.17 KB
/
debian-multicore-init.d
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
#!/bin/bash
### BEGIN INIT INFO
# Provides: cyclone
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts a service on the cyclone web server
# Description: Foobar
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/twistd
SERVICE_DIR=/path/to/foobar
SERVICE_NAME=foobar
INSTANCES=4
START_PORT=9901
LISTEN="127.0.0.1"
CONFIG=$SERVICE_DIR/$SERVICE_NAME.conf
APP=${SERVICE_NAME}.web.Application
USER=www-data
GROUP=www-data
# Check out the start_service function for other customization options
# such as setting CPU affinity.
if [ ! -x $DAEMON ]; then
echo "ERROR: Can't execute $DAEMON."
exit 1
fi
if [ ! -d $SERVICE_DIR ]; then
echo "ERROR: Directory doesn't exist: $SERVICE_DIR"
exit 1
fi
start_service() {
echo -n " * Starting $SERVICE_NAME... "
for n in `seq 1 $INSTANCES`
do
PORT=$[START_PORT]
PIDFILE=/var/run/$SERVICE_NAME.$PORT.pid
LOGFILE=/var/log/$SERVICE_NAME.$PORT.log
DAEMON_OPTS="-u $USER -g $GROUP --pidfile=$PIDFILE --logfile=$LOGFILE cyclone --port $PORT --listen $LISTEN --app $APP -c $CONFIG"
START_PORT=$[PORT+1]
start-stop-daemon -Sq -p $PIDFILE -x $DAEMON -- $DAEMON_OPTS
e=$?
if [ $e -eq 1 ]; then
echo "already running"
return
fi
if [ $e -eq 255 ]; then
echo "couldn't start"
return
fi
# Set CPU affinity
if [ -x /usr/bin/taskset ]; then
sleep 1
/usr/bin/taskset -pc $n `cat $PIDFILE` &> /dev/null
fi
done
echo "done"
}
stop_service() {
echo -n " * Stopping $SERVICE_NAME... "
for n in `seq 1 $INSTANCES`
do
PORT=$[START_PORT]
PIDFILE=/var/run/$SERVICE_NAME.$PORT.pid
START_PORT=$[PORT+1]
start-stop-daemon -Kq -R 10 -p $PIDFILE
e=$?
if [ $e -eq 1 ]; then
echo "not running"
return
fi
done
echo "done"
}
case "$1" in
start)
start_service
;;
stop)
stop_service
;;
restart)
sp=$START_PORT
stop_service
START_PORT=$sp
start_service
;;
*)
echo "Usage: /etc/init.d/$SERVICE_NAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0