[cgi] Tail starten en stoppen

Pagina: 1
Acties:

  • Simkin
  • Registratie: Maart 2000
  • Laatst online: 03-08 16:40
Ik wil graag via een webpagina een tail (unix tool) van een logfile kunnen starten en stoppen maar ik weet niet of en hoe dit mogelijk is.

Ik wil het commando "tail -f /var/log/syslog.log > output.txt" op de server uitvoeren maar weet niet of ik het commando zo los in een cgi bestand kan stoppen. Ook weet ik niet hoe ik de tail weer kan stoppen (normaal control c)

Die output file will ik dan versturen naar de web gebruiker (via MUTT ?) maar ik zit nog te tubben over het hoe en wat.

Ik had gehoopt dat iemand me op weg kon helpen.
Bij voorbaat dank

[ Voor 56% gewijzigd door Simkin op 03-12-2002 12:45 ]


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

hmmjah,.. ik zou de quickstart even lezen, en wat meer tijd in je start-post steken..
maar wat bedoel je met je tail kunnen starten en stoppen?

[ Voor 20% gewijzigd door thomaske op 03-12-2002 12:21 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Simkin
  • Registratie: Maart 2000
  • Laatst online: 03-08 16:40
Simkin wijzigde dit bericht 03-12-2002 12:43 (39%)

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

mooi :)

(dat nodigt al een stuk meer uit, om een antwoord te geven!)

je kan met system() server-commando's uitvoeren. Maar dat is volgens mij maar eenmalig (en niet 'streaming' zoals jij wilt)

wat me te binnen schiet (weet dus niet of het kan) is om een socket/stream te openen naar je stdin. En zo alles wat je binnen krijgt, direct op het scherm te printen. (de pagina blijft constant 'laden' in de browser)
Wanneer iemand de browser stopt, wordt ook meteen het script gestopt.

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Simkin
  • Registratie: Maart 2000
  • Laatst online: 03-08 16:40
Ik ga eens kijken wat ik kan vinden over die server commandos, alvast bedankt!

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Nou ligt aan verschillende dingen:
- welke taal gebruik je? Perl/PHP? Gebruik system()
- Bash etc? gewoon commandoregel in je scriptje pleuren

Maar... browsers beginnen pas met de info te tonen als de verbinding met de server verbroken is.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

MUBA schreef op 03 December 2002 @ 14:59:
Maar... browsers beginnen pas met de info te tonen als de verbinding met de server verbroken is.
Da's niet helemaal waar :)
ze beginnen met info tonen wanneer ze 256 byte binnen hebben..
(mits het in een tabel staat, dan wordt het pas weergegeven wanneer de hele tabel is geladen!)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Simkin
  • Registratie: Maart 2000
  • Laatst online: 03-08 16:40
Ik wil een post sequence starten nadat de tail loopt.
Zodra de post sequence is afgelopen (10 posts) moet de tail stoppen.
Ik wil dan de tail output of op het scherm weergeven of toelaten sturen (of zoiets)
De tail hoeft niet persee realtime gedisplayed worden.

Ik gebruik het liefst Perl dus moet ik het system() commando gebruiken?

Volgens mij moet het volgende mij wel kunnen helpen
This CGI code is activated by an HTTP server when serving a URL like
/cgi-bin/tail-f?period=600&file=/opt/apache/logs/access

This code watches the given file , sending its last nlines lines to the client. This script does not quit after the first peek into the file, but rather keeps watching the file, checking up on it every period seconds. The watching stops when a user agent (a browser, that is) closes the connection: e.g., in response to the user's pressing the 'stop' button. The watching also terminates when the file disappears. All in all, this is similar to a familiar UNIX tail -f command, working across the network.

Opening the tail-f URL starts off a server-web-browser finite automaton . The latter quickly goes through several states, without any user intervention. When the Finite State Machine reaches its final state, it leaves the result of the computation in a browser window: a frame set with a HTML form on the top, and the tail lines of the file . The form in the top frame presents the parameters of the script -- file name, watch period, nlines -- and their specified or implied values. You can enter or modify them right on the form, and then click on the watch button. The bottom frame shows the tail of the file, automatically updated via a server push .

When scanning a file, we deliberately avoid a direct positioning of the file. For one thing, fseek() etc. functions are not standard in Scheme. For another, treating a file as a purely sequential stream enables us to handle file s which are not regular files per se: named (FIFO) pipes, raw devices, serial ports, etc.

[ Voor 72% gewijzigd door Simkin op 03-12-2002 15:07 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 12:58
Je wil dus gewoon "tail -10 filetje" doen? Dan zie ik het probleem verder niet echt.

Ik ben overigens niet echt te spreken over het ondoordachte gebazel over browsers. Laten we het hier op houden: iedere browser kan in principe gegevens weergeven zodra ze binnenkomen. Het is echter niet gegarandeerd dat een browser dat in bepaalde situaties wel of niet doet. Gangbare browsers hebben met eenvoudig opgebouwde pagina's (enkele paragrafen met tekst bijvoorbeeld) geen enkele moeite, maar soms worden secties pas weergegeven als ze afgesloten worden.

Er is in ieder geval geen standaard die zegt dat bij 256 bytes (waarom in godsnaam dat getal?) gegevens weergegeven moeten worden, of dat dat bij een tabel niet mag (of zou kunnen). Ook is de webserver absoluut niet verplicht om gegevens met een zekere periode door te sturen. Hoe vaak dit gebeurt is dus een beetje afhankelijk van de webserver in kwestie.

Dit alles is echter niet relevant voor de topicstarter, voor zover ik begrijp (al begrijp ik het nog steeds niet volledig), maar toch. Feitelijk onjuiste informatie mag natuurlijk niet ongecorrigeerd blijven.

  • Simkin
  • Registratie: Maart 2000
  • Laatst online: 03-08 16:40
Ik vermoed dat wat ik wil realiseren bizonder eenvoudig is, maar ik ben 1 van die velen die nog veel moet leren ;)
Mijn probleem is dus vooral..hoe pak ik dit aan.

Ik wil via een cgi file een tail starten om die naar een bepaalde tijd weer te stoppen om vervolgens de output van die tail op het scherm te toveren.
Ik weet niet of ik een tail commando, zoals ik via een telnet sessie zou gebruiken, gewoon in een cgi file kan zetten. Ook is het mij (nog) onduidelijk hoe ik de output op het scherm krijg.

Verwijderd

Perl:
1
2
3
$tail = `tail -f /var/log/syslog.log`;
print $tail;
exit;

Let op: gebruik backticks (naast de 1 op je toetsenbord), hoe je die laat stoppen mag je zelf opzoeken. zie ook www.perldoc.com

  • Simkin
  • Registratie: Maart 2000
  • Laatst online: 03-08 16:40
Foxboy
...super bedankt!! hier ga ik mee aan de slag :)
"command()" hoef ik dus niet te gebruiken?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 27-08 22:41

Creepy

Tactical Espionage Splatterer

En als je zoals eerder aangegeven de -f weglaat maar en een -10 neerzet dan stopt tail meteen en drukt de laatste 10 regels van je log af.

man tail.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Juup
  • Registratie: Februari 2000
  • Niet online
Verwijderd schreef op 03 december 2002 @ 15:38:
Perl:
1
2
3
$tail = `tail -f /var/log/syslog.log`;
print $tail;
exit;

Let op: gebruik backticks (naast de 1 op je toetsenbord), hoe je die laat stoppen mag je zelf opzoeken. zie ook www.perldoc.com
Dit gaat dus niet werken. Ik zou beginnen met dit te proberen:
Perl:
1
2
3
4
#!/usr/bin/perl -w
use strict;
print "Content-type: tex/plain\n\n";
print `tail -f /var/log/syslog.log`;

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Simkin
  • Registratie: Maart 2000
  • Laatst online: 03-08 16:40
hmmm.....
ik had #!/usr/bin/perl gebruikt ipv de -w daarachter (wat doet die?)

Ik ga eens spelen, nogmaals bedankt!

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

thomaske schreef op 03 December 2002 @ 15:03:
[...]


Da's niet helemaal waar :)
ze beginnen met info tonen wanneer ze 256 byte binnen hebben..
(mits tenzij het in een tabel staat, dan wordt het pas weergegeven wanneer de hele tabel is geladen!)
ik begreep er echt de tering van wat je nou bedoelde :D tot ik erachter kwam dat je tenzij bedoelde

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea

Pagina: 1