Creación de una unidad de systemd para uwsgi

Lo primero es instalar el paquete uwsgi

apt install uwsgi

Las unidades está en /lib/systemd/system y son los ficheros con extensión .service.

La estructura del fichero es bastante sencilla, por ejemplo, la de apache:

system[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl graceful
PrivateTmp=true
Restart=on-abort

[Install]
WantedBy=multi-user.target
root@burbuja:/home/debian# cat /lib/systemd/system/ssh.service 
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=sshd.service

Esto nos permite iniciar, parar, reiniciar, consultar el estado y varias acciones más sobre ese servicio.

El fichero correspondiene a la unidad uswgi quedaría:ua

[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target
  • Description: descripción del servicio.
  • After: la unidad del fichero empezará cuando la unidad indicada esté iniciada.
  • ExecStart: comandos que se ejecutan cuando el servicio se activa.
  • Restart: decide si el servicio se reiniciará cuando acabe el proceso, se mate o haya un tiemout.
  • KIllSignal: señal que manda el proceso para parar el servicio cuando se le pide.
  • Type: configura el tipo de inicio del proceso. Con notify el demonio manda una notificación cuando se ha iniciado el servicio. ExecStrart es el proceso principal.
  • StandardError: fichero en el que se van a mandar los mensajes de error.
  • NotifyAcces: contral el acceso al socket de notificación de estado del servicio.
  • WantedBy: nivel en el que se inicia el servicio.

Una vez definido el demonio, hay que activarlo y añadirlo a la secuencia de arranque:

root@burbuja:/home/debian# systemctl enable uwsgi.service
Synchronizing state of uwsgi.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable uwsgi
root@burbuja:/home/debian# systemctl daemon-reload
root@burbuja:/home/debian# systemctl start uwsgi.service

root@burbuja:/home/debian# systemctl status uwsgi.service
● uwsgi.service - uWSGI Emperor
 Loaded: loaded (/etc/systemd/system/uwsgi.service; enabled; vendor preset: enabled)
 Active: active (exited) since Wed 2018-01-10 11:46:45 UTC; 5h 1min ago

Jan 10 11:46:45 burbuja systemd[1]: Starting LSB: Start/stop uWSGI server instance(s)...
Jan 10 11:46:45 burbuja uwsgi[9887]: Starting app server(s): uwsgi (omitted; missing conffile(s) in /etc/uwsgi/apps-enabled).
Jan 10 11:46:45 burbuja systemd[1]: Started LSB: Start/stop uWSGI server instance(s).

Los permisos que tiene que tener el fichero .service son los siguientes:

root@burbuja:/home/debian# chmod 0755 /etc/systemd/system/uwsgi.service 
root@burbuja:/home/debian# ls -la /etc/systemd/system
total 44
drwxr-xr-x 10 root root 4096 Jan 10 17:22 .
drwxr-xr-x 5 root root 4096 Sep 21 15:50 ..
drwxr-xr-x 2 root root 4096 Sep 21 15:51 cloud-init.target.wants
drwxr-xr-x 2 root root 4096 Sep 21 15:53 emergency.service.d
drwxr-xr-x 2 root root 4096 Sep 21 15:50 getty.target.wants
drwxr-xr-x 2 root root 4096 Jan 10 16:48 multi-user.target.wants
drwxr-xr-x 2 root root 4096 Sep 21 15:51 network-online.target.wants
drwxr-xr-x 2 root root 4096 Sep 21 15:53 rescue.service.d
lrwxrwxrwx 1 root root 31 Sep 21 15:51 sshd.service -> /lib/systemd/system/ssh.service
drwxr-xr-x 2 root root 4096 Sep 21 15:50 sysinit.target.wants
lrwxrwxrwx 1 root root 35 Sep 21 15:51 syslog.service -> /lib/systemd/system/rsyslog.service
drwxr-xr-x 2 root root 4096 Sep 21 15:51 timers.target.wants
-rwxr-xr-x 1 root root 246 Jan 10 16:47 uwsgi.service

 


http://uwsgi-docs.readthedocs.io/en/latest/Systemd.html

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *