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