Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

emuliranje tail komande

[es] :: PHP :: emuliranje tail komande

[ Pregleda: 2040 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon emuliranje tail komande17.11.2010. u 09:28 - pre 162 meseci
Oni koji imaju iskustva sa linux administracijom znaju za tail komandu.
-f modifikator je posebno koristan za pracenje log fajlova jer vam ispisuje u konzolu sve nove logove, onako kako se log fajl puni u realnom vremenu.
Ima li neko ideju kako da se tako nesto emulira iz PHP-a?
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.static.kdsinter.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: emuliranje tail komande17.11.2010. u 09:34 - pre 162 meseci
Za sta ti treba? Tj. sta zelis da radis sa tim emuliranim tail-om? :)

edit:

Sad sam se setio da sam jednom pravio logovanje top komande (flegovi su za FreeBSD). Kako se top po defaultu updateuje u realnom vremenu, sa -d 1 sam dobio ispis jedne "strane", u trenutku kad se pozove (-d je isto kao -n kod gnu/linuxa).

Code:

function logTop(){
    $logFile = "/home/robert/mysql.log";
    $topOutput = null;
    $i = 0;
    while($topOutput === null or $i < 10) {
        $topOutput = shell_exec('top -d 1 -U mysql');
        $i++;
    }

    if($topOutput !== null) {
        $topOutputHeader = "top log datetime: " . date('Y-m-d H:i:s') . "\n";
        $topOutput = $topOutputHeader . $topOutput . "\n====================================\n";
        file_put_contents($logFile, $topOutput, FILE_APPEND);
    }
}


Funkciju sam pozivao na odredjenim mestima u kodu (pocetak, kraj, nakon n iteracija petlje, itd.).

Mozda ti ovo da neku ideju =)

[Ovu poruku je menjao kazil dana 17.11.2010. u 10:44 GMT+1]
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon Re: emuliranje tail komande17.11.2010. u 10:07 - pre 162 meseci
Treba mi tacno ovako
- tail -f jednog log fajla.
- parsiranje svakog novog unosa, ali u realnom vremenu (zato mi treba -f)
- ubacivanje tog izparsiranog sadrzaja u bazu.

Nesto sam kontao sad ovako..
- beskonacna petlja
- prva iteracija otvorim fajl, pokazivac na kraj fajla, zapamtim poziciju i to je to
- sljedeca iteracija, odem na zapamcenu poziciju, iscitam sve do kraja, parsiranje obrada smjestanje u bazu, pokazivac na kraj, zapamtim poziciju;
- svaka nova iteracija ovo iznad
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.static.kdsinter.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: emuliranje tail komande17.11.2010. u 10:18 - pre 162 meseci
Pa drugo resenje bas ni ja ne vidim... Jedino sto -f neces bas moci da koristis :) A bez -f moze cak i da upali posto je po defaultu izmedju updatea sa -f 1 sekunda. Jedino obrati paznju ako dodje do rotiranja logova, da ti ne pobrljavi nesto :)

A je l' mozes da prepravis to sto loguje, da loguje odmah u bazu, ne u file?
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: emuliranje tail komande17.11.2010. u 10:41 - pre 162 meseci
Mozda sacuvati u array svaku liniju fajla za zatim uporediti sa starijim sa array_diff().

Kako ces pokretat skriptu - iz konzole ili ...?
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon Re: emuliranje tail komande17.11.2010. u 10:47 - pre 162 meseci
Ne mogu da prepravim, to je neki sistemski log fajl i zakucan je tu gdje jeste.
Skripta ce se pokretati iz konzole.
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.static.kdsinter.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: emuliranje tail komande17.11.2010. u 11:01 - pre 162 meseci
Pa onda ga roknes u background job preko nohup-a i jedno while(true) i lupaj po fileu :) iskreno, mene jedino brine cimanje baze cirka svake sekunde.

Ako smem da pitam, koja je svrha prebacivanja loga u bazu i to ovakvom frekvencijom?
 
Odgovor na temu

Nemke_BG

Član broj: 163822
Poruke: 341
*.static.sbb.rs.

Jabber: Nemke_BG@elitesecurity.org
Sajt: https://www.nmdesign.rs


+45 Profil

icon Re: emuliranje tail komande17.11.2010. u 11:18 - pre 162 meseci
Evo ti tail f-ja koju ja koristim vec 2 godine i koju sam napisao na osnovu par slicnih koje sam nas'o na php.net-u i googlu. Tako da sad joj ti sad dodaj to sto tebi treba

Code:


    public function tail($file, $num_to_get = 100)
    {
        //if num_to_get is 0 returns complete file
        if($num_to_get === 0) return file_get_contents($file);

        //Opens a file
        $fp = fopen($file, 'r');

        //Determines size of file
        $position = filesize($file);

        //Takes file pointer to the end of file
        fseek($fp, $position-1);

        //Defines length of blocks we will read
        $chunklen = 4096;

        $data = "";

        mb_internal_encoding("UTF-8");
        mb_regex_encoding('UTF-8');

        //Starts reading the file until position is set to 0 or less than 0
        while($position > 0)
        {
            //Determines if position is less than chunk size that we are reading
            if($position <= $chunklen)
            {
                //Set the chunk size to the $position and set position to 0
                $chunklen = $position;
                $position = 0;
            }
            else
            {
                //Calculates next position from where we will read our file data
                $position = $position - $chunklen;
            }

            //sets file pointer to next position
            fseek($fp, $position);

            //reads data
            $data = fread($fp, $chunklen). $data;

            //test if we have enough lines
            $num_of_new_lines = mb_substr_count($data, "\n");

            if ($num_of_new_lines >= $num_to_get + 1)
            {
                //Finds excess num of new lines
                $temp = $num_of_new_lines - $num_to_get;

                //take only the specified number of lines from our data
                return preg_replace("/^(.*\n){".($temp)."}/", "", $data, 1);
            }
        }

        //closing file
        fclose($fp);

        //returning data if we didn't have enough lines to display
        return $data;
    } 



...
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon Re: emuliranje tail komande18.11.2010. u 09:00 - pre 162 meseci
Sredio sam. Uglavnom :) ima jos par sitnica koje nisu problem.
Kombinacija svega ovdje recenog. Hvala.

@kazil
ovo je potrebno zbog nekog panela koji mora da prikazuje podatke koji se nalaze samo u logovima. A smjestam u bazu jer je tako lakse za kasniju manipulaciju, pregled, koriscenje...
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

[es] :: PHP :: emuliranje tail komande

[ Pregleda: 2040 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.