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

Вот мой скрипт (исполняемый файл оболочки), который я запускаю с помощью cron:

#!/bin/sh
dateis=$(date +"%Y-%m-%d-%H-%M")
if [pgrep -x "arecord" >/dev/null]
then 
    
else 
    arecord -v -f dat -r 48 -D hw:1,0 -d 200 -c 2 | lame -r -h - record-$dateis.mp3
fi

По какой-то причине, даже когда arecord записывает, он пытается запустить другой экземпляр arecord. В командной строке pgrep указывает правильно. Но по какой-то причине он не остановится и будет игнорировать оператор if. Он начинает запись, даже если он работает в тот же момент.

Надеюсь, я ясно изложил этот вопрос.

0
cngzz1 24 Дек 2020 в 18:21
[pgrep -x "arecord" >/dev/null] должен попытаться открыть файл с именем /dev/null] и выполнить команду с именем [pgrep - оба этих действия должны привести к ошибкам. Вы уверены, что это именно то, что содержит ваш скрипт?
 – 
steeldriver
23 Дек 2020 в 02:37
2
Вставьте свой код в shellcheck.net, чтобы получить помощь по синтаксическим ошибкам.
 – 
glenn jackman
23 Дек 2020 в 04:57
Спасибо @glennjackman! отличный инструмент!!
 – 
Asaf Chertkoff
24 Дек 2020 в 03:33
Какая у вас ОС?
 – 
Gerard H. Pille
24 Дек 2020 в 13:18

1 ответ

Вам наверное нужно

#!/bin/sh
dateis=$(date +"%Y-%m-%d-%H-%M")
if pgrep -x "arecord" >/dev/null
then
    :
else
    arecord -v -f dat -r 48 -D hw:1,0 -d 200 -c 2 | lame -r -h - record-$dateis.mp3
fi

Я проверил это, он сделал то, что вы хотите.

0
Gerard H. Pille 24 Дек 2020 в 13:09
Сделал это (спасибо) и все равно - он продолжает начинать новую запись до того, как запись остановит предыдущую...
 – 
Asaf Chertkoff
24 Дек 2020 в 03:34
Что дает вам «файл $ (который есть запись)»?
 – 
Gerard H. Pille
24 Дек 2020 в 06:05
Интересно... когда я использую "file $(который aplay)", я получаю "usr/bin/arecord: символическая ссылка на aplay", а когда я делаю "fle $(который aplay)", я получаю все детали
 – 
Asaf Chertkoff
24 Дек 2020 в 11:11
1
Может быть причиной того, что "pgrep -x" не работает.
 – 
Gerard H. Pille
24 Дек 2020 в 11:14
В ПОРЯДКЕ. но я действительно этого не понимаю. Потому что я вижу процесс. когда я делаю "pidof arecord", получаю число (вероятно, pid), а когда я делаю pidof "aplay", я ничего не получаю...
 – 
Asaf Chertkoff
24 Дек 2020 в 11:19