¦ledzenie zmian w pliku

Ogólne pytania dotyczące systemu
janiewiem
Posty: 31
Rejestracja: 30 maja 2007, 17:27
Lokalizacja: Kraków

¦ledzenie zmian w pliku

Post autor: janiewiem »

Witam serdecznie kochane grono :)

Wiec kolejny z moich problemow jawi sie nastepujaco:

1. Mam program ktory pozwala na powiedzmy rejestracje nowych uzytkownikow, pobiera od nich 3 zmienne, login, mail i haslo i zapisuje je w pliku PLIK.txt w formacie Mail#user#haslo
tak wyglada kazda linijka tego pliku.

2. Chodzi mi teraz o to, zeby za kazdym razem kiedy user sie zarejestruje i jednoczesnie zostanie dopisana nowa linjka do tego pliku, zewnetrzny skrypt ktory caly czas obserwowalby ten plik.txt wysylal maila na podany adres z potwierdzeniem rejestracji.

3. Moj problem polega na tym ze nie wiem czego moznaby uzyc do sledzenia tego pliku. Wiem juz jak wydobyc poszczegolne dane (za pomoca 'awk'), wiem jak przekazac do skryptu ostatnia linijka tego pliku (tail -n 1), ale nie mam pojecia czego uzyc do monitorowania, zeby mail byl wysylany od razu jak tylko dodana zostanie linijka do pliku. Jakies wskazowki?
nick12345
Posty: 4
Rejestracja: 17 września 2007, 20:15

Post autor: nick12345 »

A w czym chcesz to zrobić?
janiewiem
Posty: 31
Rejestracja: 30 maja 2007, 17:27
Lokalizacja: Kraków

Post autor: janiewiem »

Wlasciwie to nie wiem, myslalem o jakims skrypcie w bashu, lub jesli jest jakis gotowy program ktory mialby takie mozliwosci to moglby byc.
taa, jaasne
Posty: 19
Rejestracja: 06 kwietnia 2008, 22:29

Post autor: taa, jaasne »

może gamin (lub starszy FAM)? > http://www.gnome.org/~veillard/gamin/index.html
janiewiem
Posty: 31
Rejestracja: 30 maja 2007, 17:27
Lokalizacja: Kraków

Post autor: janiewiem »

jedynie konsola wchodzi w gre :/
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Witam
Jak Cię zainteresuję to przygrzebałem Ci mini-demona ;-)

Kod: Zaznacz cały

#!/usr/bin/perl

$path="/path/to/file"; #sciezka do obserwowanego pliku
$time=3; #czas co jaki ma sprawdzac plik

$rozmiar=&proc_rozmiar($path); #inicjacja zmiennej

while (1)
{
        $rozmiar_new=&proc_rozmiar($path);
        if ($rozmiar_new>$rozmiar)
        {
                print "Nastapila zmiana, plik ma teraz $rozmiar_new linii\n";
                $ost=`tail -n 1 $path`;
                print "Ostatnia linia to : $ost\n";
                &proc_podzial($ost);
                print "Mail :: $mail, User :: $user; Pass :: $pass\n";
                $rozmiar=$rozmiar_new;
                ############################################
                #tu mozna wstawic polecenie wysylajace maila
                ############################################
        }
        else
        {
        print "Bez zmian, plik ma wciaz $rozmiar linii\n";
        }
sleep $time;
}

sub proc_rozmiar
{
        #procedura sprawdza ilosc linii w pliku
        $rozm=`wc -l $path`;
        @rozm=split(' ', $rozm);
        $rozm=@rozm[0];
}

sub proc_podzial
{
        #procedura dzieli linie na poszczegolne pola
        @pola=split('#',$ost);
        $mail=$pola[0];
        $user=$pola[1];
        $pass=$pola[2];
}
Taki mały skrypcik w Perlu. Pewnie można było to zrobić inaczej, ale akurat miałem taką inwencję. Odpala się go w tle, sprawdza co n sekund czy zmieniła się ilość linii w podanym pliku. Linie z printami można wywalić, tak tylko pokazowo są wstawione. W zaznaczonym miejscu trzeba wstawić polecenie wysyłające maila i gotowe.
Jeśli trzeba by coś zmienić to pisz, się zmieni ;-)
melonlm
Posty: 13
Rejestracja: 24 czerwca 2008, 20:03
Lokalizacja: z Ziemi

Post autor: melonlm »

Zainteresuj się mechanizmem "inotify" jądra. Pozwala on na zadanie listy plików i katalogów do obserwowania i jąderko będzie mówiło ci o każdej zmianie :) . Pozwala unikać aktywnego czekania i pollingu (okresowego sprawdzania). Niestety nie mogę podać ci kodu bo leży "na kopyrajcie" u byłego pracodawcy :( . Perl ma bibliotekę do inotify i napisanie demona zajmie ci chwilę. Poza tym jest pakiet " inotify-tools" w Debianie, który pozwoli ci na zrobienie tego z basha

powodzenia!
mlyczek
Junior Member
Posty: 979
Rejestracja: 02 sierpnia 2006, 19:17

Post autor: mlyczek »

Można jeszcze sprawę rozwiązać tak, że program, który pobiera dane od użytkownika i dopisuje linijkę do pliku będzie wysyłał maila do tej osoby po zarejestrowaniu uzytkownika. Nie musisz wtedy monitorować cały czas tego pliku, pisać demona itp., bo mail bedzie wysyłany dokładnie wtedy, kiedy użytkownik się zarejestruje.
ODPOWIEDZ