バックグラウンドで実行され、スピーカーが話し始めるたびにスピーカーの出力を記録し、スピーカーが停止すると停止するサービスを作成しようとしています。
この目的のために次の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
が必要ですのでご注意ください 実行するサービスであり、システム全体のサービスでない場合は、開始時に実行されないため、上記の問題が発生する可能性があります
承認された回答:
pulseaudio
はユーザーサービスとして実行され、スクリプトをsysemdサービスとして実行する前に、システム全体のサービスにするなどの変更を行う必要があります。そうしないと、接続エラーが発生します。
ただし、bashスクリプトを実行するシステムサービスを作成する場合は、次の手順に従ってください。
まず、 ターミナルで次のコマンドを実行して、起動時にシェルスクリプトを実行するカスタムsystemdサービスを作成および編集します。
sudo nano /etc/systemd/system/MyRec.service
2番目、 次のコードをコピーしてエディタに貼り付け、/FULL/PATH/TO/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
3番目 ターミナルで次のコマンドを実行してサービスを開始します。
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