LinuxForum.Fans
Тема

Запуск скрипта wav to mp3 через crontab

Автор: Manson 20 сообщений 6465 просмотров
#138445

Здравствуйте,

У меня возникла проблема со скриптом конвертации tomp3.sh. Скрипт находиться в папке /var/spool/asterisk/monitor/. При запуске скрипта вручную он конвертирует wav - файлы в mp3, но когда ставлю задачу в crontab -e , скрипт запускается, но конвертирует в Mp3 c размером 0кб.
Вот скрипт:
#!/bin/bash
#20080624 - Author: Gregg Hansen
#http://www.thiscoolsite.com
#Make sure to install Lame and copy mlame to your .wav dir
#If you specify your own filenames, use NO spaces.

recorddir="/var/spool/asterisk/monitor"
for i in `ls $recorddir/*.wav`; do
cd $recorddir
$recorddir/mlame -f -o "-b 16 -m m -q 9 --resample 8" $i
date=`ls -l $i | awk '{print $7,$6,2008,$8}'`
mp3=`echo $i | sed 's/.wav/.mp3/g'`
touch -d "$date" $mp3

В crontab -e :
* */1 * * * root /var/spool/asterisk/monitor/tomp3.sh
Пакет lame установлен.

Пожалуйста помогите решить данную проблему.

#138527

В crontab -e :
text

* */1 * * * root /var/spool/asterisk/monitor/tomp3.sh

root не надо.
text
* */1 * * * /var/spool/asterisk/monitor/tomp3.sh
#138764

Remedy,
Все равно не помогает, скрипт конвертирует в mp3 файлы с размером 0 кб.

#138887

уточните пожалуйста, если Вы запускаете в консоли
[console]/var/spool/asterisk/monitor/tomp3.sh[/console]
то он отрабатывает правильно?
Присутствует ли в папке /var/spool/asterisk/monitor скрипт mlame?
Попробуйте сделать следующее:
создайте файл /var/spool/asterisk/monitor/log
а в crontab запишите так
* */1 * * * root /var/spool/asterisk/monitor/tomp3.sh >> /var/spool/asterisk/monitor/log
как отработает скрипт - выложите содержание файла log

#138896
Remedy написал:
root не надо.

+100500!
Manson, добавьте в скрипт второй строкой:

text
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/lib/java/bin
#139429

Спс большое что откликнулись.

w03zd8rc написал:
уточните пожалуйста, если Вы запускаете в консоли
[console]/var/spool/asterisk/monitor/tomp3.sh[/console]
то он отрабатывает правильно?

После запуска скрипта вручную он wav файлы конвертируются в mp3, c размером указанным в скрипте.

Присутствует ли в папке /var/spool/asterisk/monitor скрипт mlame?

Скрипт mlame присутствует в папке /var/spool/asterisk/monitor

Попробуйте сделать следующее:
создайте файл /var/spool/asterisk/monitor/log
а в crontab запишите так
* */1 * * * root /var/spool/asterisk/monitor/tomp3.sh >> /var/spool/asterisk/monitor/log
как отработает скрипт - выложите содержание файла log

Вот содержание файла log при запуске скрипта через crontab:

text
Force overwriting existing destination files
New lame options are '-b 16 -m m -q 9 --resample 8'
converting of '/var/spool/asterisk/monitor/1298625418.28.wav' to '/var/spool/asterisk/monitor/1298625418.28.mp3' failed
Force overwriting existing destination files
New lame options are '-b 16 -m m -q 9 --resample 8'
converting of '/var/spool/asterisk/monitor/1298625564.30.wav' to '/var/spool/asterisk/monitor/1298625564.30.mp3' failed

#139433
drBatty написал:
[quote=Remedy]root не надо.

+100500!
Manson, добавьте в скрипт второй строкой:

text
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/lib/java/bin

[/quote]

добавил во вторую строку скрипта. но все равно crontab конвертирует в mp3 c размером 0кб. Возможно это связано с правами доступа. Права доступа скриптов mlame и tomp3.sh установлен +x.

#139874
w03zd8rc написал:
уточните пожалуйста, если Вы запускаете в консоли
[console]/var/spool/asterisk/monitor/tomp3.sh[/console]
то он отрабатывает правильно?
Manson написал:

После запуска скрипта вручную он wav файлы конвертируются в mp3, c размером указанным в скрипте.

От чьего имени запускаете скрипт в консоли? от своего или от рута?

#139899

Запускаю от рута. Но запускал и от своего, скрипт работает.

#139903

попробуйте из строчки $recorddir/mlame -f -o "-b 16 -m m -q 9 --resample 8" $i убрать кавычки,
[console]$recorddir/mlame -f -o -b 16 -m m -q 9 --resample 8 $i[/console]

и снова покажите вывод в лог файл

#139908
Manson написал:
апускаю от рута. Но запускал и от своего, скрипт работает.

ВСЁ надо запускать от своего имени.
1) crontab -e от своего
2) скрипт - тоже от своего
3) и скрипт, и файлы должны лежать не в /var/spool, а в /home/user/
4) и скрипт, и файлы должны иметь владельца - user, т.е. НЕ рут
5) chmod +x надо тоже выполнять самому, а не через рута.
Повторяю 100500+1 раз:
Под рутом НЕ РАБОТАЮТ!!!
вообще.
под рутом только новых юзеров делают/удаляют, и ещё ограничивают права этих юзеров, И ВСЁ!

#196462

Чем всё закончилось то? Получилось решить проблему - converting of '.wav' to '.mp3' failed ?

У меня та-же проблема, (временно) запускаю скрипт кроном из под рута, не помогает. Из консоли работает и из под рута и из под пользователя (права на папку выставлены).

У меня скрипт еще проще -

text

#!/bin/sh
cd /mnt/disk/monitor/
./mlame *.wav  >> log.txt
echo Tvou mat >> log.txt

в итоге лог имеем такой -

text

'201103031522-6015-83437065390.mp3' already exists, skipping
converting of '201109291638-6017-83433768322.wav' to '201109291638-6017-83433768322.mp3' failed
converting of '201109291638-6018-89122991437.wav' to '201109291638-6018-89122991437.mp3' failed
converting of '201109291641-6018-89043857898.wav' to '201109291641-6018-89043857898.mp3' failed
converting of '201109291642-6018-89506466383.wav' to '201109291642-6018-89506466383.mp3' failed
converting of '201109291643-6018-89122589108.wav' to '201109291643-6018-89122589108.mp3' failed
converting of '201109291646-9090072342-s.wav' to '201109291646-9090072342-s.mp3' failed
converting of '201109291647-6018-89122493096.wav' to '201109291647-6018-89122493096.mp3' failed
converting of '201109291648-6018-89122664246.wav' to '201109291648-6018-89122664246.mp3' failed
converting of '201109291650-6018-89045494743.wav' to '201109291650-6018-89045494743.mp3' failed
Tvou mat

в самом mlame за это отвечает такой кусок

text

        if [ -f "$src" ]; then
            if [ $testoverwrite = true -a -f "$dst" ]; then
                echo \'$dst\' already exists, skipping
                sleep $errordelay
            elif $mp3coder $options "$src" "$dst"; then
                if [ $removesource = true ]; then
                    mv -f "$dst" "$src"
                fi
            else
                echo converting of \'$src\' to \'$dst\' failed
                sleep $errordelay
            fi
        else
            echo No source file \'$src\' found.
            sleep $errordelay
#196482
RusLanR написал:
if [ $removesource = true ]; then
mv -f "$dst" "$src"
fi

вот этот кусок опасный... возможно уже всё сконвертировано... посмотрите file <...wav>

#198071

Суть вопроса не в "опасном куске" , а в том что из под юзера с консоли всё работает, а из крона нет

#198169
RusLanR написал:
Суть вопроса не в "опасном куске" , а в том что из под юзера с консоли всё работает, а из крона нет

скажу по-другому: возможно ошибка в этом месте... проверьте, на являются ли выши wav'ы уже mp3

Ещё попробуйте перенаправить в лог и поток ошибок... а на крайний случай запускайте mlame через bash -x - будет большой отладочный вывод...

#198210

Проблема уже почти решена :), удалением mlame и написанием своего скрипта (вообщем то похожего на mlame ;)
Как закончю и откатаю скрипт выложу его суда.

#198225

Рано я порадовался :(, вообщем сама программка lame которая, не фурычит из крона, почему непонятно.

#282669

запустите lame с ключом -S
видимо крону не нравится обилие логов, которые генерирует lame

#282674

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

#282684

Скажите пожалуйста, а как вы отлавливаете событие добавления нового wav файла в каталог monitor?

Войдите или зарегистрируйтесь, чтобы ответить.