GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie richte ich einen Dienst für die Aufnahme von Audioausgabe im Hintergrund ein?

Ich versuche, einen Dienst zu erstellen, der im Hintergrund läuft und die Ausgabe des Lautsprechers aufzeichnet, wenn er zu sprechen beginnt, und stoppt, wenn er stoppt.

Ich habe zu diesem Zweck die folgende Bash erstellt und sie funktioniert wie erwartet.

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

Um daraus einen Dienst zu machen, habe ich myrec erstellt in /etc/init.d/ wie folgt:

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

Nach dem Neustart habe ich erwartet, dass es automatisch ausgeführt wird, als ich seinen Status über sudo service myrec status überprüft habe , es zeigt:

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

Also habe ich es mit sudo service myrec start gestartet und jetzt ist der Status:

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

Ich weiß nicht, ob es läuft oder nicht, aber wenn ich etwas abspiele und stoppe, nimmt es nichts im angegebenen Ordner auf.

Können Sie mir erklären, was falsch ist? Übrigens, wenn es ein Tool mit der gleichen Funktionalität gibt, können Sie mir das gerne vorstellen…

Aktualisierung:

Bitte beachten Sie, dass für den Aufnahmedienst pulseaudio erforderlich ist Dienst ausgeführt werden soll und wenn es sich nicht um einen systemweiten Dienst handelt, wird er beim Start nicht ausgeführt und kann das oben genannte Problem verursachen

Akzeptierte Antwort:

Bitte beachten Sie, dass pulseaudio wird als Benutzerdienst ausgeführt, und Sie müssen einige Änderungen vornehmen, z. B. einen systemweiten Dienst erstellen, bevor Sie Ihr Skript als sysemd-Dienst ausführen können. andernfalls erhalten Sie einen Verbindungsfehler.

Wenn Sie jedoch einen Systemdienst zum Ausführen Ihres Bash-Skripts erstellen möchten, gehen Sie bitte wie folgt vor:

Erstens Erstellen und bearbeiten Sie einen benutzerdefinierten systemd-Dienst, um das Shell-Skript beim Booten auszuführen, indem Sie den folgenden Befehl im Terminal ausführen:

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

Zweitens Kopieren Sie den folgenden Code und fügen Sie ihn in den Editor ein, ersetzen Sie /FULL/PATH/TO/SCRIPT mit dem echten vollständigen Pfad zu Ihrem Skript und speichern Sie es, indem Sie Strg drücken + X drücken Sie dann Y drücken Sie dann Enter :

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

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

[Install]
WantedBy=multi-user.target

Drittens Starten Sie den Dienst, indem Sie den folgenden Befehl im Terminal ausführen:

sudo systemctl start MyRec

Endlich Aktivieren Sie den Dienst, indem Sie den folgenden Befehl im Terminal ausführen:

sudo systemctl enable MyRec

Um eine ordnungsgemäße Ausführung zu gewährleisten, stellen Sie bitte sicher, dass Sie einen Shebang #!/bin/bash hinzufügen in der ersten Zeile Ihres Skripts wie folgt:

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

Machen Sie die Skriptdatei auch ausführbar, indem Sie chmod +x ausführen drauf so:

chmod +x scriptfile

Ubuntu
  1. So richten Sie HAProxy in Ubuntu 16.04 ein

  2. So richten Sie den MySecureShell-SFTP-Server unter Ubuntu 18.04 ein

  3. So aktivieren Sie den PipeWire-Audiodienst, um PulseAudio in Ubuntu 21.04 zu ersetzen

  4. So legen Sie ulimit-Werte für einen systemd-Dienst fest

  5. So leiten Sie die Ausgabe des systemd-Dienstes in eine Datei um

So richten Sie den RatticDB-Passwortverwaltungsdienst unter Ubuntu 16.04 ein

So richten Sie die Multi-Faktor-Authentifizierung für SSH unter Linux ein

So richten Sie die automatische Ausführung eines Python-Skripts mit Systemd ein

So richten Sie Desktop-Verknüpfungen für cPanel ein

Wie richte ich Backups für WHM ein?

So richten Sie einen NGINX RTMP-Server für das Streaming ein