Как настроить службу для записи выходного звука в фоновом режиме

Я пытаюсь создать службу, которая работает в фоновом режиме и записывает вывод говорящего всякий раз, когда он начинает говорить, и останавливается, когда он останавливается.

Для этой цели я создал следующий 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

Чтобы сделать его службой, я создал myrec в /etc/init.d/ следующим образом:

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

После перезагрузки я ожидал, что он запустится автоматически, когда я проверил его статус через sudo service myrec status , он показывает:

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

Итак, я запустил его sudo service myrec start , и теперь статус:

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

Я не знаю, это работает или нет, но когда я играю и что-то останавливаю, он ничего не записывает в указанную папку.

Не могли бы вы указать мне, что не так? Кстати, если есть инструмент с такой же функциональностью, вы можете представить его мне ...

Обновление:

Обратите внимание, что служба записи требует запуска службы pulseaudio , а если это не так общесистемная служба, она не запускается при запуске и может вызвать проблему, описанную выше

0
задан 22 July 2020 в 15:28

1 ответ

Пожалуйста, имейте в виду, что pulseaudio запускается как пользовательская служба, и вам необходимо внести некоторые изменения, например сделать ее общесистемной службой, прежде чем вы сможете запускать свой скрипт как системная служба. иначе вы получите ошибку подключения.

Но если вы хотите создать системную службу для запуска сценария bash, выполните следующие действия:

Во-первых, создайте и отредактируйте пользовательскую службу systemd для запуска сценария оболочки при загрузке, запустив следующую команду в терминале:

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

Во-вторых, скопируйте и вставьте следующий код в редактор, замените /FULL/PATH/TO/SCRIPT на настоящий полный путь к вашему script и сохраните его, нажав Ctrl + X, затем нажмите Y, затем нажмите Enter :

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

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

[Install]
WantedBy=multi-user.target

Третий, ] запустите службу, выполнив в терминале следующую команду:

sudo systemctl start MyRec

Наконец, включите службу, выполнив в терминале следующую команду:

sudo systemctl enable MyRec

Чтобы обеспечить правильное выполнение, обязательно добавьте шебанг #!/bin/bash в первой строке вашего скрипта, например так:

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

Также сделайте файл скрипта исполняемым, запустив chmod +x вот так:

chmod +x scriptfile
0
ответ дан 11 August 2020 в 09:08

Другие вопросы по тегам:

Похожие вопросы: