GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nastavit službu pro záznam výstupního zvuku na pozadí?

Snažím se vytvořit službu, která běží na pozadí a zaznamenává výstup reproduktoru, kdykoli začne mluvit, a zastaví se, když se zastaví.

Pro tento účel jsem vytvořil následující bash a funguje podle očekávání.

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

Aby to byla služba, vytvořil jsem myrec v /etc/init.d/ takto:

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

Po restartu jsem očekával, že se spustí automaticky, když jsem zkontroloval jeho stav pomocí sudo service myrec status , ukazuje:

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

Tak jsem to spustil pomocí sudo service myrec start a nyní je stav:

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

Nevím, jestli to běží nebo ne, ale když něco přehraju a zastavím, nic to do zadané složky nezaznamená.

Mohl byste mi poradit, co je špatně? Mimochodem, pokud existuje nástroj se stejnou funkčností, můžete mi ho představit…

Aktualizace:

Upozorňujeme, že nahrávací služba vyžaduje pulseaudio služba, která má být spuštěna, a pokud se nejedná o celosystémovou službu, nespustí se při spuštění a může způsobit výše uvedený problém

Přijatá odpověď:

Mějte prosím na paměti, že pulseaudio se spouští jako uživatelská služba a než budete moci spustit skript jako službu sysemd, musíte provést některé změny, jako je vytvoření celosystémové služby. jinak se zobrazí chyba připojení.

Pokud však chcete vytvořit systémovou službu pro spuštění vašeho bash skriptu, postupujte takto:

Za prvé vytvořte a upravte vlastní službu systemd pro spuštění skriptu shellu při spouštění spuštěním následujícího příkazu v terminálu:

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

Zadruhé zkopírujte a vložte následující kód do editoru, nahraďte /FULL/PATH/TO/SCRIPT s skutečnou úplnou cestou k vašemu skriptu a uložte jej stisknutím Ctrl + X poté stiskněte Y poté stiskněte Enter :

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

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

[Install]
WantedBy=multi-user.target

Za třetí spusťte službu spuštěním následujícího příkazu v terminálu:

sudo systemctl start MyRec

Konečně povolte službu spuštěním následujícího příkazu v terminálu:

sudo systemctl enable MyRec

Chcete-li zajistit správné provedení, nezapomeňte přidat znak #!/bin/bash v prvním řádku vašeho skriptu takto:

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

Také udělejte soubor skriptu spustitelný spuštěním chmod +x na to takhle:

chmod +x scriptfile

Ubuntu
  1. Jak nastavit HAProxy v Ubuntu 16.04

  2. Jak nastavit MySecureShell SFTP Server na Ubuntu 18.04

  3. Jak povolit službu PipeWire Audio pro nahrazení PulseAudio v Ubuntu 21.04

  1. Jak nastavit oprávnění Sudo pro uživatele v Linuxu

  2. Jak nastavit modul CWP pro WHMCS

  3. Jak nastavit hodnoty ulimit pro službu systemd

  1. Jak napsat spouštěcí skript pro Systemd?

  2. Jak změnit zvukový výstup na hdmi z příkazového řádku?

  3. Jak přesměrovat výstup služby systemd do souboru