Witam,
Otrzymałem zadanie, by w BASH'u napisać skrypcik weryfikujący status wykonania innego skryptu.
Ponieważ nie mam specjalnie dostępu do tego innego skryptu to wstępnie wpadłem na weryfikację po wynikach czyli po wygenerowanych/powstałych plikach.
Skrypt główny dokonuje zrzutu danych do plików.
Powstają pliki o numeracji rosnącej względem kolejnych wykonań skryptu zaś sam zrzut jest kończony plikami podsumowującymi zrzut o specyficznej nazwie.
Przykładowo......
X odpowiada za ostatnią cyfrę danego roku a ???? jest to liczba rosnąca.
Pliki ciągłe...
BB_X011_????_zrzut.lol <-- Pliki wyświetlane kolejno.
Pliki kończące zrzut...
BB_MAIL_X011_????_zrzut.lol <-- Plik kończący zrzut.
Przykład...
BB_6011_1356_zrzut.lol
BB_6011_1357_zrzut.lol
BB_6011_1358_zrzut.lol
BB_6011_1359_zrzut.lol
BB_6011_1360_zrzut.lol
BB_6011_1361_zrzut.lol
i kończący dzisiejsze wywołanie skryptu ...
BB_MAIL_6011_1362_zrzut.lol
Muszę wykreować coś, co zliczy mi wygenerowane dziś pliki oraz powiadomi np mailem o zakończeniu zrzutu.
Wstępnie widzę to tak, by skrypt zliczał wszystkie pliki zrzutu od ostatniego pliku zawierającego w nazwie "MAIL" do następnego. Utworzenie nowego pliku z wpisem MAIL wygeneruje wysłanie maila np.
Zrzut zakończony. Wygenerowano 1056 plików.
Wodotryskiem będzie np zsumowanie wagi (zajętości) samego zrzutu ale to już daleki, dalszy plan.
Macie może jakieś sugestie?
Wstępnie googlam za komendami 'find', 'mail', 'grep' oraz za samym skrypceniem w bashu gdyż z programowania niestety jestem nogą a tu wypada zastosować jakieś zmienne. CO nie zmienia faktu, że warto się tego nauczyć.
Każda pomoc, szablon i sugestie są na wagę złota
Dziękuję i pozdrawiam!
bash - wyszukiwanie, weryfikacja czy powsta
- LordRuthwen
- Moderator
- Posty: 2324
- Rejestracja: 18 września 2009, 21:45
- Lokalizacja: klikash?
Tak więc plan mam taki....
Jeśli proces ID odpalenia skryptu nadal jest aktywny to szukaj plików nie starszych niż data odpalenia skryptu.
Po zakończeniu procesu odczekaj np 2 minuty i wyślij mail z zakończeniem i ilością zliczonych wierszy dla ls lub find dla plików.
Teraz to "tylko" ubrać w skrypt
Dodane:
Chwilowo wygląda to tak i jeszcze (oczywiście) nie działa jak powinno ponieważ wpierw czyta składnię z google i uczę się pisać skrypty a potem będę się zastanawiał, czemu to nie chce odpalić :P
Teraz zostaje to doprowadzić do działania.
PS: Czy proces puszczony przy pomocy at będzie widziany w skrypcie w formie jak powyżej?
Chodzi o to, że chciałem wyciągnąć procedID z skryptu który jest puszczony przy pomocy komendy at -f /katalog/zap.sh now
Skrypt odpala 2 inne skrypty również w trybie &.
Pomyślałem, że zamiast generować zapętlenie tak długo, jak skrypt działa to wywołam je po zakończeniu pracy skryptu i wynik będzie na tacy. Przynajmniej... w teorii.
Jeśli proces ID odpalenia skryptu nadal jest aktywny to szukaj plików nie starszych niż data odpalenia skryptu.
Po zakończeniu procesu odczekaj np 2 minuty i wyślij mail z zakończeniem i ilością zliczonych wierszy dla ls lub find dla plików.
Teraz to "tylko" ubrać w skrypt
Dodane:
Chwilowo wygląda to tak i jeszcze (oczywiście) nie działa jak powinno ponieważ wpierw czyta składnię z google i uczę się pisać skrypty a potem będę się zastanawiał, czemu to nie chce odpalić :P
Kod: Zaznacz cały
DT_UR= 'DATE'
zap.sh now
PID = $!
while [ $PID > 0 ]; do sleep 30
if [$PID = null]
then
sleep 30
ZLICZ= 'find (folder) -date => $DT_UR 'LOL*LOL_costam.lol' | wc -l'
if (${ZLICZ} > 0 );
then
find (folder) -date => $DT_UR 'LOL*LOL_costam.lol' > zrzut.log
echo Plik wygenerowano.
echo "Wygenerowano ${ZLICZ} plików" < zrzut.log| ailx -s "Zrzut wykonano" mail1(malpa)lol.com mail2(malpa)lol.com
else
echo Plików brak. Ponów wyładowanie.
exit
while true
do
done
Teraz zostaje to doprowadzić do działania.
PS: Czy proces puszczony przy pomocy at będzie widziany w skrypcie w formie jak powyżej?
Chodzi o to, że chciałem wyciągnąć procedID z skryptu który jest puszczony przy pomocy komendy at -f /katalog/zap.sh now
Skrypt odpala 2 inne skrypty również w trybie &.
Pomyślałem, że zamiast generować zapętlenie tak długo, jak skrypt działa to wywołam je po zakończeniu pracy skryptu i wynik będzie na tacy. Przynajmniej... w teorii.
Panowie, przypominam się z tematem. Jak doprowadzić to do działania gdyż pisałęm to na podstawie 'składni' znalezionych z netu a i tak nie działa.
Do tego dochodzi pytanie...
Chcę by skrypt zakończył działanie jeśli znajdzie inny skrypt. Nazwa jest tu poglądowa więc testowo używam skryptu, który nie robi nic tylko 'śpi' (sleep).
Generalnie (jak mniemam) powinien w takim wypadku raz się uruchomić za za drugim razem już nie. Tymczasem i tak się uruchamia... jakieś pomysły?
obecnie wygląda to tak (oczywiście nadal się wywala):
ktoś powie co robie w tym paskudztwie źle? :P
bo nie mogę tego doprowadzić do działania...
Do tego dochodzi pytanie...
Chcę by skrypt zakończył działanie jeśli znajdzie inny skrypt. Nazwa jest tu poglądowa więc testowo używam skryptu, który nie robi nic tylko 'śpi' (sleep).
Kod: Zaznacz cały
SRY='ps -ef | grep -c sleep'
EKOD=$?
if [ ${SRY} -ge 1 ] && [ ${EKOD} =eq 0]
then
echo "Skrypt jest w trakcie - ktos juz go uruchomil"
exit 1
fi
/home/blah/zap.sh &
Generalnie (jak mniemam) powinien w takim wypadku raz się uruchomić za za drugim razem już nie. Tymczasem i tak się uruchamia... jakieś pomysły?
obecnie wygląda to tak (oczywiście nadal się wywala):
ktoś powie co robie w tym paskudztwie źle? :P
bo nie mogę tego doprowadzić do działania...
Kod: Zaznacz cały
SRY='ps -ef | grep -c bin'
EKOD=$?
if [ ${SRY} -g 1 ] && [ ${EKOD} =eq 0]
then
echo "Skrypt jest w trakcie - prawdopodobnie ktos juz uruchomil zrzut"
exit 1
fi
date > /home/blah/data_zrzutu.log
zap.sh &
echo "Zrzut rozpoczeto z data "
PID = $!
EKOD=$?
while [ ${PID} -ge 1 ] && [ ${EKOD} -eq 0]; do sleep 30
if [${PID} -z]
then
sleep 30
ZLICZ= 'find /home/blah/ -newermt /home/blah/data_zrzutu.log 'LOL*LOL_costam.lol' | wc -l'
if (${ZLICZ} -ne 0 );
then
find . -newermt /home/blah/data_zrzutu.log 'LOL*LOL_costam.lol' > /home/blah/zrzut.log
echo Plik wygenerowano.
echo /home/blah/data.log
echo /home/blah/zrzut.log
#echo "Wygenerowano ${ZLICZ} plików" < zrzut.log| ailx -s "Zrzut wykonano" [email protected] [email protected]
else
echo Plików brak. Ponów wyładowanie.
exit
while true
do
done
- marcin1982
- Moderator
- Posty: 1731
- Rejestracja: 05 maja 2011, 12:59
- Lokalizacja: Zagłębie Dąbrowskie