GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo configurar un servicio para grabar audio de salida en segundo plano?

Trato de crear un servicio que se ejecuta en segundo plano y graba la salida del altavoz cada vez que comienza a hablar y se detiene cuando se detiene.

Creé el siguiente bash para este propósito y funciona como se esperaba.

echo "Monitoring sound card for recordings"
name="record"
name=~/recordings/$name
while true 
do
        echo "Monitoring speaker sound "
        now="$(date +'%m-%d-%H-%M-%S')"
        parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -v 5 -t raw -b 16 -e signed -c 2 -r 44100 - "$name"-"$now".ogg silence 1 0.1 3% 1 3.0 3%

        #test $? -eq 0 && break;
        echo "$name-$now was recorded"
done

Para convertirlo en un servicio creé myrec en /etc/init.d/ de la siguiente manera:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          myrec
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: your description here
### END INIT INFO

PATH=/home/ahmad/recordings
DESC="Recording audio output"
NAME=myrec
DAEMON=/home/ahmad/recordings/myrec.sh
DAEMON_ARGS="s read"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

Después de reiniciar, esperaba que se ejecutara automáticamente, cuando verifiqué su estado a través de sudo service myrec status , muestra:

● myrec.service - LSB: your description here
     Loaded: loaded (/etc/init.d/myrec; generated)
     Active: inactive (dead)
       Docs: man:systemd-sysv-generator(8)

Así que lo comencé con sudo service myrec start y ahora el estado es:

● myrec.service - LSB: your description here
     Loaded: loaded (/etc/init.d/myrec; generated)
     Active: active (exited) since Wed 2020-07-22 15:23:24 +0430; 4s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 3714 ExecStart=/etc/init.d/myrec start (code=exited, status=0/SUCCESS)

جولای 22 15:23:24 app systemd[1]: Starting LSB: your description here...
جولای 22 15:23:24 app systemd[1]: Started LSB: your description here.

No sé si se está ejecutando o no, pero cuando juego y detengo algunas cosas, no graba nada en la carpeta especificada.

Me podrían orientar que es lo que falla? Por cierto, si hay una herramienta con la misma funcionalidad, puede presentármela...

Actualización:

Tenga en cuenta que el servicio de grabación requiere pulseaudio servicio que se va a ejecutar y si no es un servicio de todo el sistema, no se ejecuta al inicio y puede causar el problema anterior

Respuesta aceptada:

Tenga en cuenta que pulseaudio se ejecuta como un servicio de usuario y debe realizar algunos cambios, como convertirlo en un servicio de todo el sistema, antes de poder ejecutar su script como un servicio sysemd. o de lo contrario obtendrá un error de conexión.

Pero, si lo que desea es crear un servicio de sistema para ejecutar su script bash, siga estos pasos:

Primero, cree y edite un servicio systemd personalizado para ejecutar el script de shell en el arranque ejecutando el siguiente comando en la terminal:

sudo nano /etc/systemd/system/MyRec.service 

Segundo, copie y pegue el siguiente código en el editor, reemplace /FULL/PATH/TO/SCRIPT con la ruta completa real a su secuencia de comandos y guárdelo presionando Ctrl + X luego presione Y luego presione Enter :

[Unit]
Description=MyRec service
After=gdm.service

[Service]
Type=oneshot
ExecStart=/FULL/PATH/TO/SCRIPT

[Install]
WantedBy=multi-user.target

Tercero, inicie el servicio ejecutando el siguiente comando en la terminal:

sudo systemctl start MyRec

Finalmente, habilite el servicio ejecutando el siguiente comando en la terminal:

sudo systemctl enable MyRec

Para garantizar una ejecución adecuada, asegúrese de agregar un shebang #!/bin/bash en la primera línea de su guión así:

#!/bin/bash

echo "Monitoring sound card for recordings"
name="record"
name=~/recordings/$name
while true 
do
        echo "Monitoring speaker sound "
        now="$(date +'%m-%d-%H-%M-%S')"
        parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -v 5 -t raw -b 16 -e signed -c 2 -r 44100 - "$name"-"$now".ogg silence 1 0.1 3% 1 3.0 3%

        #test $? -eq 0 && break;
        echo "$name-$now was recorded"
done

También haga que el archivo de script sea ejecutable ejecutando chmod +x en él así:

chmod +x scriptfile

Ubuntu
  1. Cómo configurar HAProxy en Ubuntu 16.04

  2. Cómo habilitar el servicio de audio PipeWire para reemplazar PulseAudio en Ubuntu 21.04

  3. Cómo configurar los privilegios de Sudo para el usuario en Linux

  4. Cómo establecer valores ulimit para un servicio systemd

  5. Cómo redirigir la salida del servicio systemd a un archivo

Cómo configurar el servicio de administración de contraseñas de RatticDB en Ubuntu 16.04

Cómo configurar la autenticación multifactor para SSH en Linux

Cómo configurar la ejecución automática de un script de Python usando Systemd

Cómo configurar accesos directos de escritorio para cPanel

¿Cómo configurar copias de seguridad para WHM?

Cómo configurar un servidor NGINX RTMP para transmisión