Crear un servicio para ejecutar un script (en debian)

Tengo una webcam, que uso para emitir en twitch. He estado 1 mes entero activando y desactivando el script y teniendo que mantener la ventana de terminal abierta. Esto era un rollo por que solo lo podía ejecutar en casa. También he probado screm y me ha sido imposible hacer que funcione(no entiendo bien su funcionamiento aún).

Al final se me ocurrió crear un servicio para ejecutar el script con systemd.

Tendremos que hacer 3 pasos:

  1. Crear el servicio.
  2. Redirigir la salida de errores de syslog a otro archivo.
  3. Crear un logrotate con los archivos del log.

Crear servicio.

Lo primero que tenemos que hacer es crear el archivo que crea el servicio:

/etc/systemd/system/stream.service

[Unit]
Description=Control del streeming.    #Descripcion del servicio 
After=network-online.target           #No puede ejecutarse hasta que  la red este online
Requires=network-online.target        #Necesita que la red este online para poder ejecutarse
 
[Service]
Type=simple                              #Tipo de archivo a ejecutar 
ExecStart=/ruta/a/stream.sh              #Ruta del sript 
Restart=on-failure                       #Recargar si falla 
StandardOutput=syslog                    #salida standar de datos redirigiado a syslog
StandardError=syslog                     #Salida standar de errores redirigido a syslog
SyslogIdentifier=stream                  #Como quires identificar las cadenas de texto del syslog
 
[Install]
WantedBy=multi-user.target   #??
Alias=stream                 #es el nombre corto para ejecutar el comando 

Para mas información podéis revisar esta pagina web: https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

Ahora solo tienes que recargar los script con systemctl  y activar el servicio.

sudo systemctl daemon-reload
sudo systemctl enable strean.service

sudo systemctl start stream.service

Redirigir la salida de errores de syslog a otro archivo

Dado que la salida de datos genera demasiado información, no me interesa que este dentro de syslog, por lo que voy a crear un archivo en la carpeta de logs

sudo touch /var/log/stream.log

y ahora redirigimos los datos a ese archivo.

craremos el archivo /etc/rsyslog.d/stream.config :

if $programname == 'stream' then /var/log/stream.log
if $programname == 'stream' then  ~

reiniciamos el servicio de rsyslog :

sudo systemctl restart rsyslog.service

con esto ya tenemos redirigido los logs de stream a un archivo aparte.

Crear un logrotate con los archivos del log

como punto importante cuando creamos un log es poder tener una rotación de los mismos, comprimiendo y borrando los mas antiguos

creamos el archivo /etc/logrotate.d/stream:

/var/log/stream.log {      #archivo que queremos rotar 
    weekly                 #rotacion semanal
    rotate 4               #un maximo de 4 rotaciones
    compress               #comprimir el archivo
    missingok              #continuar cuando exista algun error o archivo perdido 
    create 0640 root adm   #al crear el nuevo archivo poner los permismos y el dueño y grupo determinado 
}

en este caso no es necesario reiniciar el servicio ya que logrotate lee todos los archivos contenidos en la carpeta /etc/logrotate.d/

Y con esto ya tenemos nuestro servicio creado, eso si de una forma muy básica ya que no hay ninguna control de error ni nada avanzado. Solo arrancamos el script o lo paramos.

Deja un comentario