bash, skrypt sprawdzaj

Potrzebujesz pomocy z C, C++, perl, python, itp.
dawid
Posty: 32
Rejestracja: 14 października 2007, 22:19

bash, skrypt sprawdzający pocztę co określony okres czasu

Post autor: dawid » 14 października 2007, 22:46

Witam,

Mam następujący problem. Znalazłem kiedyś w sieci prosty skrypt sprawdzający pocztę w gmailu. Skrypt sprawdza czy są nowe wiadomości w skrzynce, wyświetla stosowne info i kończy swoją działalność. Stosowałem go z powodzeniem w duecie z conky i karambą.

Co zrobić, aby skrypt uruchamiał się co zadany okres czasu, przykładowo co 10 minut i sprawdzał pocztę? Najchętniej widziałbym rozwiązania w postaci modyfikacji skryptu. Czyli mniej więcej coś takiego że odpalam skrypt z parametrem np. ./check_gmail 600 i skrypt sprawdza pocztę co 10 minut, dopóki nie przerwę jego działania.

Oto kod skryptu:

Kod: Zaznacz cały

#!/bin/bash 

gmail_login="login" #login do skrzyki 
gmail_password="haslo" #hasło do konta 

dane="$(wget --secure-protocol=TLSv1 --timeout=3 -t 1 -q -O - https://${gmail_login}:${gmail_password}@mail.google.com/mail/feed/atom --no-check-certificate | grep 'fullcount' | sed -e 's/.*<fullcount>//;s/<\/fullcount>.*//' 2>/dev/null)" 

if [ -z "$dane" ]; then 
  echo "Blad polaczenia" 
else 
  echo "Masz: $dane nowe(ych) wiadomosc(i)." 
fi 
Na chwilę obecną wymyśliłem 2 rozwiązania. Pierwsze z nich jest dość prymitywne. Polega na uruchomieniu skryptu w nieskończonej pętli;

Kod: Zaznacz cały

./check_gmail 600

Kod: Zaznacz cały

while [ 1=1 ] 
do 
  #tu nastepuje sprawdzanie poczty 
  sleep $1 
done
Nie chciałbym jednak stosować tego rozwiązania. Drugi sposób jest jak na moje możliwości bardziej finezyjny. Są dwa skrypty. Pierwszy skrypt pyta a następnie zapisuje do pliku konfiguracyjnego login, haslo do gmaila oraz okres czasu co jaki ma być sprawdzana poczta.
Pytania są zadawane jeśli skrypt uruchomię z parametrem init:

Kod: Zaznacz cały

./poczta.sh init
Po uruchomieniu tego skryptu z parametrem start, wywoływany jest skrypt check_gmail.sh. Odbywa się to w następujący sposób:

Kod: Zaznacz cały

...
do_start() {
./check_gmail.sh $login $haslo $czas &
}
...
#dalsza część skryptu
Spodziewałem się, że check_gmail.sh będzie sobie pracował w tle, sprawdzając pocztę i wyświetlając wynik przy pomocy osd_cat. Niestety tak się nie dzieje. Walczę z tym już dość długo i szczerze mówiąc kończą mi się pomysły. Macie jakieś sugestie co do rozwiązania mojego problemu?

pozdrawiam
dawid

salmon
Beginner
Posty: 296
Rejestracja: 12 października 2007, 23:28
Lokalizacja: Gliwice/Bielsko-Biała

Post autor: salmon » 15 października 2007, 00:02

Zainteresuj się programem cron

frik
Beginner
Posty: 156
Rejestracja: 18 marca 2007, 17:42
Lokalizacja: wroclaw

Post autor: frik » 15 października 2007, 08:52

salmon pisze:Zainteresuj się programem cron
dzieki temu bedziesz mogl ustawic zeby dany skrypt wykonywal sie o okreslonej godzinie w konkretne dni

dawid
Posty: 32
Rejestracja: 14 października 2007, 22:19

Post autor: dawid » 15 października 2007, 21:14

Mi raczej chodzi o to aby skrypt uruchamiał się powiedzmy co 5, lub 10 minut i sprawdzał mi pocztę. Z tego co przeczytałem na temat tego programu, to cron
uruchamia zadania cogodzinowe, codzienne, cotygodniowe i comiesięczne. Zadania te wpisywane są w postaci skryptów do katalogów: /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly.
Ktoś może mi powiedzieć, czy da się uruchomić działający skrypt w tle? Dlaczego jak wywołam skrypt w następujący sposób:

Kod: Zaznacz cały

./check_gmail.sh $login $haslo $czas &
to on nie działa w tle, tylko czeka aż zostanie wywołany poleceniem fg?

ODPOWIEDZ