Nowe posty

xx Dystrybucja pod HP Omen (6)
2024-03-27, 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
lamp Problem z Linux Lite po instalacji (0)
2024-03-27, 19:50:30
xx Ile pingwinów? (1)
2024-03-27, 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Skrypt do nagrywania radia internetowego  (Przeczytany 1791 razy)

Rostov

  • Gość
Skrypt do nagrywania radia internetowego
« dnia: 2016-07-13, 19:24:21 »
Od razu napiszę, że nie znam się zupełnie na pisaniu skryptów. Te, które wykorzystuję, znalazłem w necie i tylko przerobiłem do własnych potrzeb.

Jakiś czas temu wykupiłem konto shell, by nagrywać audycje radiowe, których nie mogę słuchać na bieżąco. Nagrywam przy pomocy dwóch następujących skryptów:

#!/bin/bash

 
DATA=`date +%d-%m-%Y_%H-%M`
mkdir /home/karol/JW
NAZWAPLIKU=$DATA       
wget -i /home/karol/listarw.txt -O /home/karol/JW/$NAZWAPLIKU.mp3

oraz

#!/bin/bash

 
DATA=`date +%d-%m-%Y_%H-%M`
mkdir /home/karol/JW
NAZWAPLIKU=$DATA         
wget -i /home/karol/listarwk.txt -O /home/karol/JW/$NAZWAPLIKU.mp3

Zatrzymuję nagrywanie skryptem następującym:

#!/bin/bash

killall -9 wget

Do tego dwa pliki *.txt, w których znajdują się alternatywne linki strumieni, gdyby któryś z nich nie działał:

http://stream4.nadaje.com:9240/prw
http://stream6.nadaje.com:9240/prw
http://stream2.nadaje.com:9248/prw.aac
http://stream4.nadaje.com:9246/prw.ogg

oraz

http://stream4.nadaje.com:9230/rwkultura
http://stream6.nadaje.com:9230/rwkultura
http://stream2.nadaje.com:9238/rwkultura.aac
http://stream4.nadaje.com:9236/rwkultura.ogg

Generalnie wszystko działa jak należy. Problem jest tylko w tym, że dość często zdarzają się kłopoty ze streamem, nagrywanie jest przerywane i niekontynuowane dalej.  Komenda 'mtr' wykazuje okresowo straty pakietów. Operatorem streamu jest nadaje.com. Potwierdzili, że mają problem, ale jakoś nie kwapią się, by go naprawić. W związku z tym chciałbym jakoś tak przekształcić skrypty, aby po wystąpieniu strat pakietów wget nawiązywał kolejną próbę nagrania i kontynuował nagrywanie do tego samego pliku, który poprzednio przerwał nagrywać. Czy coś takiego jest w ogóle możliwe?

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2763
  • 1709
    • Zobacz profil
Odp: Skrypt do nagrywania radia internetowego
« Odpowiedź #1 dnia: 2016-07-13, 22:16:14 »
Komenda moze zwrocic 0 jesli jest ok, lub 1 jesli wystapil blad,
ale niestety lub stety to nie jedyny sygnał jakie polecenie moze zostac zwrócone,
wiecej tutaj  http://tldp.org/LDP/abs/html/exitcodes.html
przetestuj, też recznie odlaczajac neta.

Tu masz przyklad skryptu
#!/bin/bash

# Licence GNU GPLv3 : http://www.gnu.org/licenses/gpl-3.0.html
# EN - Destiny: This script if for restart sound PulseAudio.
# PL - Przeznaczenie: Ten skrypt jest do restartowania dzwięku PulseAudio.

funcError()
{
zenity --error --text "$1" ; exit 1
}

funcInfo()
{
zenity --info --text "$1"
}


a=$(zenity --version )
if [[ "$?" -ne "0" ]]; then
RC='\e[0;31m' # Red Color
NC='\e[0m' # No Color
#  http://unix.stackexchange.com/questions/97101/how-to-catch-an-error-in-a-linux-bash-script
echo -e "${RC} Błąd:  Przed uruchomieniem skryptu proszę zainstalować zenity. ${NC}"
exit 1
fi

b=$(pulseaudioo --version 2>&1)
if [[ "$?" == "0" ]]; then
c=$(pulseaudio -k 2>&1)  && echo "pulseaudio -k: OK" || funcError "Błąd: \n $c"
d=$(pulseaudio --start 2>&1) && funcInfo "Gotowe !" || funcError "Błąd: \n $d"
else
funcError "Nie masz pulseaudio, \n  $b "
fi
Skopiowany z http://www.pclinuxos.com/forum/index.php/topic,137336.0.html

Edytowane:
W skrypcie masz tez link, zajzyj tam, tam tez sa przykłady jak użyć kod wyjscia 0 i 1.

____________________________________________

Edytowane:
Przykład z pętlą:
#!/bin/bash

# 1 oznacza blad, czyli wykonanie petli chociaz raz
a="1"

# petla, wykona sie tak dlugo az bedzie $a bedzie rowne 0
while [ "$a" != "0" ]; do
# ls to przykladowa komenda która ma zwrócić kod 0 lub inny
ls

# przypisanie kodu do zmiennej $a (bez tego mi nie dzialalo)
a=$(echo "$?")

# wyswietlenie zmiennej, czyli
echo "$a"
done

Ten skrypt pokaże liste katalogów, 
ale jesli podmienić ls na ls ro
to wystąpi błąd (pod warunkiem ze nie mamy takiego pliku ani katalogu)
 i komenda ls ro będzie się wykonywać w nieskończoność.

Jesli chcesz zeby komenda próbowała się wykonać tylko 5 razy wystarczy dodać break
#!/bin/bash

# 1 oznacza blad, czyli wykonanie petli chociaz raz
a="1"

# petla, wykona sie tak dlugo az bedzie $a bedzie rowne 0
while [ "$a" != "0" ]; do
# ls to przykladowa komenda która ma zwrócić kod 0 lub inny
ls blad123

# przypisanie kodu do zmiennej $a
a=$(echo "$?")
# wyswietlenie zmiennej, czyli
echo "$a"

x=$[x+1]
echo "$x"
if [ "$x" = "5" ]; then
break
fi
done
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil