Skocz do zawartości

Śledzenie Pliku Tekstowego (Log) + Wykonanie Skryptu Dla Nowych Linii


Mentat

Rekomendowane odpowiedzi

Witam.

 

Chciałbym wzbogacić pewną grę o dodatkowe opcje (konkretnie zmianę ustawień gry). Gra zapisuje chat do pliku tekstowego. Chciałbym śledzić ten plik i wykonywać periodycznie skrypt z "nowymi" liniami z końcówki pliku. Innymi słowy chciałbym coś jak 'tail -f' tylko by dla nowych linii wykonywał skrypt który zajmie się rozpoznawaniem komend.

 

Ma ktoś jakieś sugestie?

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, kiedyś robiłem coś takiego dla jednego z forumowiczów, ale nie pamiętam jak to się ostatecznie skończyło :) jednak u mnie to działało.

http://dl.dropbox.com/u/409786/arch/bash/stp.lab.sh

nie wiem, czy to jest działająca wersja, bo to dawno było :) ale "metoda" na pewno. Zabezpieczenie "tylko root" było tylko dlatego, że ten skrypt czytał z /var/log/messages, więc u siebie można to wyrzucić.

 

Wyjście z tail -f nie jest przekazywane od razu do strumienia, więc nic nie da się z tym nic zrobić. Ale okazuje się, że można je przekazać do "strumienia nazwanego" (mkfifo), a z niego już czyta się normalnie (czytasz każdą linie w pętli while i robisz z nią co chcesz).

  • Upvote 1
Odnośnik do komentarza
Udostępnij na innych stronach

Tak, kiedyś robiłem coś takiego dla jednego z forumowiczów, ale nie pamiętam jak to się ostatecznie skończyło :) jednak u mnie to działało.

http://dl.dropbox.com/u/409786/arch/bash/stp.lab.sh

nie wiem, czy to jest działająca wersja, bo to dawno było :) ale "metoda" na pewno. Zabezpieczenie "tylko root" było tylko dlatego, że ten skrypt czytał z /var/log/messages, więc u siebie można to wyrzucić.

Działające czy nie, czyta się z przyjemnością i można sobie poprzypominać różne rzeczy oraz nauczyć się nowych.

 

 

Wyjście z tail -f nie jest przekazywane od razu do strumienia, więc nic nie da się z tym nic zrobić. Ale okazuje się, że można je przekazać do "strumienia nazwanego" (mkfifo), a z niego już czyta się normalnie (czytasz każdą linie w pętli while i robisz z nią co chcesz).

Okazuje się że jednak tail przesyła dane od razu (choć może chodziło Ci o strumień typu | ). Przetestowałem to na bazie Twojego skryptu. W jednej konsoli wpisałem tail -n 0 -f server.log >> nowe.txt a w drugiej while true; do if read line; then echo "$line"; fi; sleep 1; done < nowe.txt i ładnie wszystko przechodziło na bieżąco. Minus tego sposobu to rosnący plik z przesłanymi liniami loga. Dlatego sposób z nazwanym strumieniem jest oczywiście lepszy bo nie zajmuje miejsca na dysku i nie trzeba go czyścić przy starcie serwera.

 

Dzięki za podpowiedzi. Teraz wszystko powinno pójść gładko.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...