Alternatywne automatyczne uruchamiane, cron SIO na drzewo !!
Alternatywne automatyczne uruchamiane, cron SIO na drzewo !!
Witam.
Odrazu zaznaczam, że cron może spadać na drzewo bo nie będę przerabiał skryptu dodając przykazdej komendzie /bin/cośtam
Musi istnieć jakaś inna metoda na uruchamianie skryptu 123.sh tak, jakbym po prostu nacisnął ENTER na skrypcie, która pozbawiona jest limitacji i problemów crona które doprowadzają mnie do szału od 2 dni.
Posiadam własny serwer i mogę instalować co tylko zechcę więc zadowolę się każdym rozwiązaniem.
Odrazu zaznaczam, że cron może spadać na drzewo bo nie będę przerabiał skryptu dodając przykazdej komendzie /bin/cośtam
Musi istnieć jakaś inna metoda na uruchamianie skryptu 123.sh tak, jakbym po prostu nacisnął ENTER na skrypcie, która pozbawiona jest limitacji i problemów crona które doprowadzają mnie do szału od 2 dni.
Posiadam własny serwer i mogę instalować co tylko zechcę więc zadowolę się każdym rozwiązaniem.
Kod: Zaznacz cały
:%s/przed/po/g
Najpierw napisz jakie limitacje i problemy z cronem doprowadzają Cię do szały, bo kuli szklanej nie mamy, i nie wiemy czy każde zaproponowane rozwiązanie nie będzie ich powielać.
Tak czy owak jedyne co mi przychodzi na myśl, to zrobienie ze skryptu daemona (co w czystym bashu jest raczej trudne) albo puszczenie go w tle z nieskończoną pętlą (z jakimś sleepem) i sprawdzanie warunków przy każdej iteracji.
Jednak powyższe wymagają czegoś więcej niż doklejenie /bin/cośtam więc wydaje mi się, że w Twoim wypadku zostaje wybranie innej profesji.
PS. Wybacz uszczypliwości..no ale kwintesencją pracy administratora jest właśnie takie grzebanie.
Grzebanie grzebaniem ale ileż można ? Zawsze jak człowiek che zrobić prostą rzecz to ZAWSZE zaczyna się od jakiś problemów i otwarcia 60 zakładek w poszukiwaniu rozwiazania.
Do szału mnie doprowadza to, że odpalony skrypt musi mieć do każdej komendy ścieżki absolutne (co za debilizm!), skrypt w nazwie nie może mieć .sh i to że nadal połowa rzeczy mi nie działa a winą jest tylko to, że odpalam to przez crona bo normalne odpalenie nie sprawia żadnych problemów. Ja che po protstu odpalić skrypt. No już prostszej rzeczy nie mogę wymagać a mimo to nadal tego nie ma.
Daję moją szopkę z cronem i skryptem:
1. Cron
2. Skrypt:
lokalizacja: /root/git/mirnada-ng-svn/update-from-svn
Oczywisćie nie działają te komendy:
$LOCAL_REV w petli if (LOCAL_REV=`/usr/bin/git svn info | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'`) - zwraca pustą wartość, odpalona normallnie w lini poleceń działa
/usr/bin/git svn rebase >> /root/1.txt - w pliku pusto
/usr/bin/git push origin miranda-ng-svn > /root/2.txt - w pliku pusto a jak wyżej jest pusto to nie ma sensu tego odpalać
Co zrobiłem źle ?
P.S. "System uruchamiania czegoś według harmonogramu" powinien działać tak: odpalam coś według harmonogramu, tak jakby ktoś wcisnął enter. Koniec kropka.
Do szału mnie doprowadza to, że odpalony skrypt musi mieć do każdej komendy ścieżki absolutne (co za debilizm!), skrypt w nazwie nie może mieć .sh i to że nadal połowa rzeczy mi nie działa a winą jest tylko to, że odpalam to przez crona bo normalne odpalenie nie sprawia żadnych problemów. Ja che po protstu odpalić skrypt. No już prostszej rzeczy nie mogę wymagać a mimo to nadal tego nie ma.
Daję moją szopkę z cronem i skryptem:
1. Cron
Kod: Zaznacz cały
SHELL=/bin/bash
LOGNAME=root
PATH="/bin:/usr/bin"
* * * * * /root/git/miranda-ng-svn/update-from-svn >> 123.txt
#* * * * * date >> /tmp/tmp.txt
lokalizacja: /root/git/mirnada-ng-svn/update-from-svn
Kod: Zaznacz cały
#!/bin/bash
export PATH="/usr/bin:/bin"
LOCAL_REPO="/root/git/miranda-ng-svn"
REMOTE_REPO="https://mysvn.ru/ghazan/myranda/trunk/"
REMOTE_REV=`/usr/bin/svn info $REMOTE_REPO | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'`
LOCAL_REV=`/usr/bin/git svn info | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'`
echo "$REMOTE_REV"
echo "$LOCAL_REV"
if [ $REMOTE_REV -eq $LOCAL_REV ]; then
/bin/echo "Local repository up to date"
exit 0;
else
/bin/echo "Local repository is outdated. Updating ..."
/usr/bin/git svn rebase >> /root/1.txt
/usr/bin/git push origin miranda-ng-svn > /root/2.txt
exit 0;
fi
$LOCAL_REV w petli if (LOCAL_REV=`/usr/bin/git svn info | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'`) - zwraca pustą wartość, odpalona normallnie w lini poleceń działa
/usr/bin/git svn rebase >> /root/1.txt - w pliku pusto
/usr/bin/git push origin miranda-ng-svn > /root/2.txt - w pliku pusto a jak wyżej jest pusto to nie ma sensu tego odpalać
Co zrobiłem źle ?
P.S. "System uruchamiania czegoś według harmonogramu" powinien działać tak: odpalam coś według harmonogramu, tak jakby ktoś wcisnął enter. Koniec kropka.
A skąd wiesz, że odpalony z crona zwraca pustą wartość? bo chyba nie po tym:$LOCAL_REV w petli if (LOCAL_REV=`/usr/bin/git svn info | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'`) - zwraca pustą wartość, odpalona normallnie w lini poleceń działa
Kod: Zaznacz cały
echo "$REMOTE_REV" echo "$LOCAL_REV"
Kod: Zaznacz cały
if [ $REMOTE_REV -eq $LOCAL_REV ];
Nie, nie po tym co podałeś. Sprawdzałem przekierowując wyjście do local-revision.txt tak samo z $REMOTE_REV - odpalone z crona działa a $LOCAL_REV wypluwa pustkę.
Niedokladnie napisalem: if [ $REMOTE_REV -eq $LOCAL_REV ] działa, porównanie sie wykonuje ale problem jest taki, ze to co jest w $LOCAL_REV czyli: `/usr/bin/git svn info | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'` odpalone lokalnie bez ` dziala bez problemu z zwraca sobie np 1300 a cron nie wiem co z tym robi, ze to zwraca pusta wartosc i warunek zawsze jest spelniony.
Czy na tym etapie można szukać alternatywy ?
Niedokladnie napisalem: if [ $REMOTE_REV -eq $LOCAL_REV ] działa, porównanie sie wykonuje ale problem jest taki, ze to co jest w $LOCAL_REV czyli: `/usr/bin/git svn info | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'` odpalone lokalnie bez ` dziala bez problemu z zwraca sobie np 1300 a cron nie wiem co z tym robi, ze to zwraca pusta wartosc i warunek zawsze jest spelniony.
Czy na tym etapie można szukać alternatywy ?
Zapytam inaczej: czy ten skrypt odpalony ręcznie działa poprawnie?
Powyższe odpalone w konsoli zwraca poprawny wynik?
no i
chyba raczej egrepem w ten sposób.
Kod: Zaznacz cały
$LOCAL_REV=`/usr/bin/git svn info | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'`; echo $LOCAL_REV
no i
Kod: Zaznacz cały
bin/grep '^Revision:'
Bo wcześniej chciałem jej użyć jako parametr dla polecenia git svn info ale się okazało ze te polecenie nie przyjmuje parametrów.Unit pisze:W jakim celu używasz zmiennej LOCAL_REPO skoro jej nie wykorzystujesz ??
Jak widać na załączonym obrazku, polecenie działa bez zarzutu:1300 to numer ostatniej rewizji obecnej w lokalnym repozytorium

No skoro odpalam w root/git/mirnada-ng-svn/update-from-svn to wywołuje właśnie tam. Odpalenie skryptu normalnie daje pożądane rezultaty.Unit pisze:Tą komendę wywołujesz w katalogu ~/git/miranda-ng-svn, a w skypcie w jakim katalogu ją wywołujesz?
Tak wygląda odpalenie skryptu:

a tak wywołanie z crona:
Kod: Zaznacz cały
1320
Local repository is outdated. Updating ...