Alternatywne automatyczne uruchamiane, cron SIO na drzewo !!

Konfiguracja serwerów, usług, itp.
Radek2212
Posty: 14
Rejestracja: 17 stycznia 2012, 22:36

Alternatywne automatyczne uruchamiane, cron SIO na drzewo !!

Post autor: Radek2212 »

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.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Kod: Zaznacz cały

:%s/przed/po/g
w VIMie zna?

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.
Radek2212
Posty: 14
Rejestracja: 17 stycznia 2012, 22:36

Post autor: Radek2212 »

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

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
2. Skrypt:

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
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.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

$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
A skąd wiesz, że odpalony z crona zwraca pustą wartość? bo chyba nie po tym:

Kod: Zaznacz cały


echo "$REMOTE_REV" echo "$LOCAL_REV"

Kod: Zaznacz cały

if [ $REMOTE_REV -eq $LOCAL_REV ];
Daj w w podwójnych nawiasach [[ ... ]]
Radek2212
Posty: 14
Rejestracja: 17 stycznia 2012, 22:36

Post autor: Radek2212 »

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 ?
Awatar użytkownika
Unit
Beginner
Posty: 356
Rejestracja: 27 marca 2007, 09:39

Post autor: Unit »

W jakim celu używasz zmiennej LOCAL_REPO skoro jej nie wykorzystujesz ??
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Zapytam inaczej: czy ten skrypt odpalony ręcznie działa poprawnie?

Kod: Zaznacz cały

$LOCAL_REV=`/usr/bin/git svn info | /bin/grep '^Revision:' | /usr/bin/awk '{print $2}'`; echo $LOCAL_REV
Powyższe odpalone w konsoli zwraca poprawny wynik?

no i

Kod: Zaznacz cały

bin/grep '^Revision:'
chyba raczej egrepem w ten sposób.
Radek2212
Posty: 14
Rejestracja: 17 stycznia 2012, 22:36

Post autor: Radek2212 »

Unit pisze:W jakim celu używasz zmiennej LOCAL_REPO skoro jej nie wykorzystujesz ??
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.

Jak widać na załączonym obrazku, polecenie działa bez zarzutu:1300 to numer ostatniej rewizji obecnej w lokalnym repozytorium

Obrazek
Awatar użytkownika
Unit
Beginner
Posty: 356
Rejestracja: 27 marca 2007, 09:39

Post autor: Unit »

Tą komendę wywołujesz w katalogu ~/git/miranda-ng-svn, a w skypcie w jakim katalogu ją wywołujesz?
Pasuje chyba tam wejść i do tego celu wykorzystasz zmienną LOCAL_REPO.
Radek2212
Posty: 14
Rejestracja: 17 stycznia 2012, 22:36

Post autor: Radek2212 »

Unit pisze:Tą komendę wywołujesz w katalogu ~/git/miranda-ng-svn, a w skypcie w jakim katalogu ją wywołujesz?
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.

Tak wygląda odpalenie skryptu:
Obrazek

a tak wywołanie z crona:

Kod: Zaznacz cały

1320

Local repository is outdated. Updating ...
ODPOWIEDZ