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:
- Crear el servicio.
- Redirigir la salida de errores de syslog a otro archivo.
- 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.