GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come impostare un servizio per la registrazione dell'audio in uscita in background?

Cerco di creare un servizio che venga eseguito in background e registrare l'output dell'altoparlante ogni volta che inizia a parlare e si interrompe quando si interrompe.

Ho creato la seguente bash per questo scopo e funziona come previsto.

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

Per renderlo un servizio ho creato myrec in /etc/init.d/ come segue:

#! /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

Dopo il riavvio mi aspettavo che si avviasse automaticamente, quando ne ho verificato lo stato tramite sudo service myrec status , mostra:

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

Quindi l'ho avviato da sudo service myrec start e ora lo stato è:

● 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.

Non so se è in esecuzione o meno, ma quando suono e fermo qualcosa, non registra nulla nella cartella specificata.

Potresti guidarmi cosa c'è che non va? A proposito, se c'è uno strumento con le stesse funzionalità, potresti presentarmelo...

Aggiornamento:

Tieni presente che il servizio di registrazione richiede pulseaudio servizio da eseguire e se non è un servizio a livello di sistema, non viene eseguito all'avvio e può causare il problema precedente

Risposta accettata:

Tieni presente che pulseaudio viene eseguito come servizio utente ed è necessario apportare alcune modifiche come renderlo un servizio a livello di sistema prima di poter eseguire lo script come servizio sysemd. o altrimenti riceverai un errore di connessione.

Ma, se quello che vuoi è creare un servizio di sistema per eseguire il tuo script bash, segui questi passaggi:

In primo luogo, creare e modificare un servizio systemd personalizzato per eseguire lo script della shell all'avvio eseguendo il seguente comando nel terminale:

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

Secondo, copia e incolla il codice seguente nell'editor, sostituisci /FULL/PATH/TO/SCRIPT con il vero percorso completo del tuo script e salvalo premendo Ctrl + X quindi premi Y quindi premi Invio :

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

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

[Install]
WantedBy=multi-user.target

Terzo, avviare il servizio eseguendo il seguente comando nel terminale:

sudo systemctl start MyRec

Finalmente, abilitare il servizio eseguendo il seguente comando nel terminale:

sudo systemctl enable MyRec

Per garantire una corretta esecuzione, assicurati di aggiungere uno shebang #!/bin/bash nella prima riga del tuo script in questo modo:

#!/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

Rendi eseguibile anche il file di script eseguendo chmod +x su di esso in questo modo:

chmod +x scriptfile

Ubuntu
  1. Come configurare HAProxy in Ubuntu 16.04

  2. Come configurare il server SFTP MySecureShell su Ubuntu 18.04

  3. Come abilitare il servizio audio PipeWire per sostituire PulseAudio in Ubuntu 21.04

  4. Come impostare i privilegi di Sudo per l'utente in Linux

  5. Come reindirizzare l'output del servizio systemd su un file

Come configurare il servizio di gestione delle password RatticDB su Ubuntu 16.04

Come impostare l'autenticazione a più fattori per SSH in Linux

Come configurare l'esecuzione automatica di uno script Python utilizzando Systemd

Come impostare i collegamenti sul desktop per cPanel

Come impostare i backup per WHM?

Come configurare un server NGINX RTMP per lo streaming