[bash] zatrzymywanie nagrywania wget


(Rostov) #21

@Domker
No i tym razem nagrywanie ruszyło, ale nie zostało ubite o wyznaczonej porze. Masakra jakaś. ;-))))


(Domker) #22

Dzises,
PID przyjął złą wartość. (wartość od uruchamianego “date”). Nie może być pierwszy człon łączony poprzez AND (&&).
Zmień na:

NAZWAPLIKU=`date +\%d-\%m-\%Y_\%H-\%M`;

(dodany średnik)
i wykasuj “&&” przed wget.
Wywal też “2>&1” bo jest niepotrzebne. Zwróć uwagę, czy jest po jednej spacji.
Na 100% działa, bo sprawdzałem.


(Rostov) #23

@Domker
Teraz działa znakomicie. Dziękuję! :slight_smile:


(Domker) #24

Wkońcu :wink:
Jak widać jest spora różnica między poleceniami inline odpalanymi w konsoli, a w crontabie. Sam jako wieloletni użytkownik systemu Linux byłem trochę zaskoczony tymi rozbieżnościami.
A więc problem SOLVED ?


(Rostov) #25

Tak, na tę chwilę problem rozwiązany. Chyba, że jeszcze coś wyniknie w trakcie użytkowania, ale nie wydaje mi się, bo ewentualne modyfikacje będą jedynie dotyczyć zmiany pór nagrywania poszczególnych audycji.

Przy okazji dopytam, bo z Linuxem mam bardzo rzadko do czynienia, a jeśli już, to głównie przy pomocy bardzo uproszczonego GUI. Te rozbieżności, o których piszesz, wynikają z różnic w stosowanych dystrybucjach Linuxa?


(Domker) #26

Nie, rozbieżności to głównie z interpretacji składni się biorą.
Crontab jak widać nieco inaczej niektóre rzeczy interpretuje.
Pewne elementy jak np. % widzę, że są niedozwolone i trzeba negować je znakiem \, gdzie w konsoli normalnie to przechodzi bez problemu.

Bardzo mnie zdziwiło z tym PID i znakiem AND (&&), że crontab przyporządkował PID z polecenia “date”, a nie ostatniego poprzedzającego.
Testowałem w konsoli, więc uznałem, że będzie działać, a jednak niektóre elementy składni crontabowi nie pasują.
Pewnie różnica dotyczy tylko uruchamiania poleceń inline, a nie tych ze skryptu w plikach SH.

W dystrybucjach też są jakieś różnice skoro np. mój exploit shella działa na większości distro, a w 2 distrach nie chciał działać. Mimo, że nie powinno teoretycznie jego działanie się różnić, bo luka jest dosyć charakterystyczna dla ogólnie shella.
https://www.youtube.com/watch?v=rKzl1ZkqXHs


(Rostov) #27

@Domker
Pozwolę sobie na jeszcze jedno amatorskie pytanie, ponieważ nie znam dobrze zasad składni. W którym miejscu kodu:

NAZWAPLIKU=`date +\%d-\%m-\%Y_\%H-\%M`;

dodać prefiks np. RW_ , który dodawany będzie na samym początku nazwy każdego pliku, tuż przed dniem miesiąca?

NAZWAPLIKU=`date +RW_\%d-\%m-\%Y_\%H-\%M`;

Może być np. tak?


(marcin82) #28

Od + zaczyna się składnia polecenia date, tak daj:
NAZWAPLIKU="RW_$(date +\%d-\%m-\%Y_\%H-\%M)"

Wynik:
echo $NAZWAPLIKU
RW_10-09-2017_19-49

PS
Znaki % nie muszą być zakomentowane za pomocą lewych ukośników przed nimi.


(Domker) #29

Nie muszą być, ale jeżeli w crontab się używa to inaczej nie działa.


(Rostov) #30

@marcin82
Plik się nagrał, ale bez nazwy, tzn. w jego nazwie jest tylko samo rozszerzenie: .mp3


(marcin82) #31

A są te ukośniki? Domker pewnie ma rację, ja nie pamiętam.

Najlepiej jest umieści wszystko poza wpisem crontaba - w osobnym skrypcie w /usr/local/bin/nazwa. W cronie podajesz tylko porę i ścieżkę do skryptu - jeśli ma argumenty to z argumentami.


(Domker) #32
NAZWAPLIKU=`date +RW_\%d-\%m-\%Y_\%H-\%M`;

Zadziała sprawdzałem.

Drugi sposób to jak masz ścieżkę, gdzie masz $NAZWAPLIKU to wystarczy dostawić RW_$NAZWAPLIKU


(Rostov) #33

@Domker
Sprawdziłem pierwszy sposób — działa. Dzięki!