diff --git a/debian/chrono.init b/debian/chrono.init index d95326a6..2a6ffbe4 100644 --- a/debian/chrono.init +++ b/debian/chrono.init @@ -14,16 +14,14 @@ # Author: Entr'ouvert PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC="Multichannel request processing" +DESC="Agendas System" NAME=chrono -DAEMON=/usr/bin/gunicorn +DAEMON=/usr/bin/uwsgi RUN_DIR=/run/$NAME PIDFILE=$RUN_DIR/$NAME.pid LOG_DIR=/var/log/$NAME SCRIPTNAME=/etc/init.d/$NAME BIND=unix:$RUN_DIR/$NAME.sock -WORKERS=5 -TIMEOUT=30 CHRONO_SETTINGS_FILE=/usr/lib/$NAME/debian_config.py MANAGE_SCRIPT="/usr/bin/$NAME-manage" @@ -37,17 +35,10 @@ GROUP=$NAME # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME -DAEMON_ARGS=${DAEMON_ARGS:-"--pid $PIDFILE \ ---user $USER --group $GROUP \ ---daemon \ ---access-logfile $LOG_DIR/gunicorn-access.log \ ---log-file $LOG_DIR/gunicorn-error.log \ ---bind=$BIND \ ---workers=$WORKERS \ ---worker-class=sync \ ---timeout=$TIMEOUT \ ---name $NAME \ -$NAME.wsgi:application"} +DAEMON_ARGS=${DAEMON_ARGS:-"--pidfile=$PIDFILE +--uid $USER --gid $GROUP +--ini /etc/$NAME/uwsgi.ini +--daemonize /var/log/uwsgi.$NAME.log"} # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh @@ -73,8 +64,6 @@ do_start() # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started - start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ - || return 1 start-stop-daemon --start --quiet --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 @@ -90,32 +79,16 @@ do_stop() # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE - RETVAL="$?" - [ "$RETVAL" = 2 ] && return 2 - # Wait for children to finish too if this is a daemon that forks - # and if the daemon is only ever run from this initscript. - # If the above conditions are not satisfied then add some other code - # that waits for the process to drop all resources that could be - # needed by services started subsequently. A last resort is to - # sleep for some time. - start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON - [ "$?" = 2 ] && return 2 - # Many daemons don't delete their pidfiles when they exit. + $DAEMON --stop $PIDFILE rm -f $PIDFILE - return "$RETVAL" + return 0 # hopefully } # # Function that sends a SIGHUP to the daemon/service # do_reload() { - # - # If the daemon can reload its configuration without - # restarting (for example, when it is sent a SIGHUP), - # then implement that here. - # - start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name `basename $DAEMON` + $DAEMON --reload $PIDFILE return 0 } diff --git a/debian/chrono.install b/debian/chrono.install index d95a6a25..b703f569 100644 --- a/debian/chrono.install +++ b/debian/chrono.install @@ -1,4 +1,5 @@ debian/chrono.service /lib/systemd/system debian/chrono-manage /usr/bin debian/settings.py /etc/chrono +debian/uwsgi.ini /etc/chrono debian/debian_config.py /usr/lib/chrono diff --git a/debian/chrono.service b/debian/chrono.service index 142d5982..88ce3ce6 100644 --- a/debian/chrono.service +++ b/debian/chrono.service @@ -1,6 +1,6 @@ [Unit] Description=Chrono -After=network.target postgresql.service +After=network.target syslog.target postgresql.service Wants=postgresql.service [Service] @@ -10,17 +10,15 @@ User=%p Group=%p ExecStartPre=/usr/bin/chrono-manage migrate_schemas --noinput ExecStartPre=/usr/bin/chrono-manage collectstatic --noinput -ExecStart=/usr/bin/gunicorn \ - --bind unix:/run/%p/%p.sock \ - --worker-class=sync \ - --workers 5 \ - --timeout=30 \ - --name %p \ - %p.wsgi:application +ExecStart=/usr/bin/uwsgi --ini /etc/%p/uwsgi.ini ExecReload=/bin/kill -HUP $MAINPID +KillSignal=SIGQUIT PrivateTmp=true Restart=on-failure RuntimeDirectory=chrono +Type=notify +StandardError=syslog +NotifyAccess=all [Install] WantedBy=multi-user.target diff --git a/debian/control b/debian/control index f9378954..43f69f4e 100644 --- a/debian/control +++ b/debian/control @@ -25,7 +25,8 @@ Depends: ${misc:Depends}, python-psycopg2, python-django-mellon, python-dateutil, - gunicorn + uwsgi, + uwsgi-plugin-python Recommends: nginx Suggests: postgresql Description: Agendas System diff --git a/debian/uwsgi.ini b/debian/uwsgi.ini new file mode 100644 index 00000000..8174b161 --- /dev/null +++ b/debian/uwsgi.ini @@ -0,0 +1,27 @@ +[uwsgi] +auto-procname = true +procname-prefix-spaced = chrono + +plugin = python +module = chrono.wsgi:application + +http-socket = /run/chrono/chrono.sock +chmod-socket = 666 +vacuum = true + +master = true +processes = 5 +harakiri = 120 +enable-threads = true + +buffer-size = 32768 + +py-tracebacker = /run/chrono/py-tracebacker.sock. +stats = /run/chrono/stats.sock +memory-report = true + +ignore-sigpipe = true + +if-file = /etc/chrono/uwsgi-local.ini + include = /etc/chrono/uwsgi-local.ini +endif =