GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagaimana Cara Mengatur Layanan Untuk Merekam Output Audio Di Latar Belakang?

Saya mencoba membuat layanan yang berjalan di latar belakang dan merekam output speaker setiap kali mulai berbicara dan berhenti saat berhenti.

Saya membuat bash berikut untuk tujuan ini dan berfungsi seperti yang diharapkan.

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

Untuk menjadikannya layanan, saya membuat myrec di /etc/init.d/ sebagai berikut:

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

Setelah mem-boot ulang, saya berharap itu berjalan secara otomatis, ketika saya memeriksa statusnya melalui sudo service myrec status , ini menunjukkan:

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

Jadi saya memulainya dengan sudo service myrec start dan sekarang statusnya adalah:

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

Saya tidak tahu apakah itu berjalan atau tidak, tetapi ketika saya memutar dan menghentikan sesuatu, itu tidak merekam apa pun di folder yang ditentukan.

Bisakah Anda membimbing saya apa yang salah? Omong-omong, jika ada alat dengan fungsi yang sama, Anda dapat memperkenalkannya kepada saya…

Pembaruan:

Harap dicatat bahwa layanan rekaman memerlukan pulseaudio layanan yang akan dijalankan dan jika itu bukan layanan di seluruh sistem, layanan tidak dijalankan saat mulai dan dapat menyebabkan masalah di atas

Jawaban yang Diterima:

Harap diingat bahwa pulseaudio dijalankan sebagai layanan pengguna dan Anda perlu melakukan beberapa perubahan seperti menjadikannya layanan di seluruh sistem sebelum Anda dapat menjalankan skrip Anda sebagai layanan sysemd. atau jika tidak, Anda akan mendapatkan kesalahan koneksi.

Namun, jika Anda ingin membuat layanan sistem untuk menjalankan skrip bash Anda, ikuti langkah-langkah berikut:

Pertama, buat dan edit layanan systemd kustom untuk menjalankan skrip shell saat boot dengan menjalankan perintah berikut di terminal:

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

Kedua, copy paste kode berikut ke editor, ganti /FULL/PATH/TO/SCRIPT dengan jalur lengkap yang sebenarnya ke skrip Anda dan simpan dengan menekan Ctrl + X lalu tekan Y lalu tekan Enter :

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

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

[Install]
WantedBy=multi-user.target

Ketiga, mulai layanan dengan menjalankan perintah berikut di terminal:

sudo systemctl start MyRec

Akhirnya, aktifkan layanan dengan menjalankan perintah berikut di terminal:

sudo systemctl enable MyRec

Untuk memastikan eksekusi yang tepat, pastikan untuk menambahkan #!/bin/bash she shebang di baris pertama skrip Anda seperti ini:

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

Juga buat file skrip dapat dieksekusi dengan menjalankan chmod +x di atasnya seperti ini:

chmod +x scriptfile

Ubuntu
  1. Cara Mengatur HAProxy di Ubuntu 16.04

  2. Cara mengatur modul CWP untuk WHMCS

  3. Cara mengatur nilai ulimit untuk layanan systemd

  1. Cara Mengatur Server SFTP MySecureShell di Ubuntu 18.04

  2. Cara Mengaktifkan Layanan Audio PipeWire untuk Mengganti PulseAudio di Ubuntu 21.04

  3. Bagaimana Cara Menulis Script Startup Untuk Systemd?

  1. Cara Mengatur Hak Istimewa Sudo untuk Pengguna di Linux

  2. Bagaimana Mengubah Output Audio Ke HDMI Dari Command Line?

  3. Cara mengarahkan output dari layanan systemd ke file