endlosschleife // befehl als dienst

scrat

New Member
Hi...

Ich hab folgendes Problem:

ich muss mittels lynx ein script starten, und das auch aufrecht erhalten. Das geht ja soweit. Bloß wenn ich die Console schließe, dann geht auch irgendwann das Script nicht mehr.

Hier nun meine Frage: wie kann cih lynx in eine Endlosschleife packen / als dienst einstellen, sodass der script auch ausgeführt wird, wenn die console aus is?

vg scrat :rolleyes:
 
Code:
apt-get install screen
:)

screen kann genau das. Er erstellt ein Terminal, das auch nach Beenden der Session noch verfügbar ist.

Einfach screen starten, Deinen Befehl ausführen und Ctrl-A-D (für "detach") drücken. Du bist wieder zurück auf der Shell und kannst Dich ausloggen. Du kannst screen jederzeit mit "screen -r" wieder auf den Bildschirm holen.

Ich lasse mit screen den IRC-Client auf dem Server offen und greife von verschiedenen Rechnern über SSH darauf zu. Funktioniert perfekt.
 
OK. danke.. hat super funktioniert. :)


Hmmm.. IRC.. das wär auch noch was für mich.. :)

hast du da so ne Art Dedicated Server?

ich werds ma Googlen.

vg scrat :rolleyes:
 
Oder wenns in nem Bash Script sein soll:

Code:
#! /bin/sh

while true; 
do
lynx -options &
done
 
hast du da so ne Art Dedicated Server?

Ja, hab einen Rootserver. Als IRC-Client verwende ich irssi, falls Du es auch mal ausprobieren willst.

Oder wenns in nem Bash Script sein soll:

Code:
#! /bin/sh

while true; 
do
lynx -options &
done

Läuft das Script weiter, wenn man sich ausloggt? Normalerweise werden doch auch die Background-Prozesse gekillt, oder?

Ohne Screen sollte es auch mit "start-stop-daemon" gehen, dann sieht man die Ausgabe von lynx jedoch nicht.
 
Hallo,

noch eine Möglichkeit wäre
Code:
nohup ./script

Damit wird das auch nicht beendet wenn man die Shell verlässt.
 
daemon, deamon, demon ...

Was ich immer gerne mache (Beispiele):

Bei Bash:

Code:
#! /bin/bash
trap '' HUP
while ((1)) ; do
        sleep 1
        irgendwelches zeug
done &> /dev/null < /dev/null &
Bei allen anderen Programmen:

Code:
nohup irgendwas &> /dev/null < /dev/null &

Ansonsten ist screen so ziemlich das genialste, was es gibt:
Code:
screen -A -m -d -S blahhhh irgendwas

Noch ne bemerkung zu "&> /dev/null < /dev/null &":
Das willst du haben, wenn du nicht willst, das dein auslogversuch hängen bleibt, weil dein Programm eben mal schnell die pipes aloziert hat, obwohl es so wohl nicht brauchen wird.

ainan
 
Last edited by a moderator:
Danke für die vielen Möglihckeiten, aber ich bleib wohl doch lieber bei screen... :rolleyes:

Ich hab aber ein weiteres Problem.

Und zwar müsste das aller ca. 5 Stunden mal neugestartet werden. Also der lynx befehl beendet werden.

- Wie geht das?
- der script erfordert Authentifizierung (also Benutzername und Passwort), kann ich da gleich den Benutzernamen und das Passwort in den Befehl einbinden? Oder kann man die htdocs so verändern, dass man nur von einer IP Adresse aus (also von meinem Server) auf die datei zugreifen kann?

vg scrat :rolleyes:
 
Also ich hab die Probleme jetzt gelöst.

Nur noch ein Problem.

Nach einer Zeit "stürzt" das script ab. Also Lynx läd nicht mehr die Seite. Kann ich das irgendwie verhindern, dass lynx aufhört? / Kann ich den Befehl in ne Endlosschleife tun, damit, wenn lynx aufhört, sofort neustartet?


vg scrat :rolleyes:
 
ich wollte auch nen tripple-post vermeiden.. ;)

Aber nun gehts weiter :)
Über crontab wollte ich nun alle 5 Minuten ein Screenfenster öffnen, mit nem lynx befehl drin. Nach 5 Minuten soll sich das wieder schließen, und ein neues soll sich öffnen.

Ich bin nun soweit:

PHP:
*/5 * * * * screen -S test lynx ....

bloß das mit dem schließen geht nich so richtig... weil direkt nen Befehl mit screen -* gibts ja nich für schließen.
Da hab ichs mal so probiert (aber hab selber nicht so richtig dran geglaubt, dass Das funktioniert. )

PHP:
*/5 * * * * screen -rx test
*/5 * * * * exit
*/5 * * * * screen -S test lynx ...

Hier nun meine Frage:
Geht das überhaupt so mit Screen, dass sich dann alle 5 Minuten so ein Fenster öffnet?
Wie könnte ich das Screen Fenster wieder schließen?

Könnte ich auch direkt mit Lynx arbeiten, und bleibt Lynx dann auch bis zum nächsten mal so aktiv?

vg scrat :rolleyes:
 
Geht das überhaupt so mit Screen, dass sich dann alle 5 Minuten so ein Fenster öffnet?
Wie könnte ich das Screen Fenster wieder schließen?

Könnte ich auch direkt mit Lynx arbeiten, und bleibt Lynx dann auch bis zum nächsten mal so aktiv?
1. Ja.
2. man kill / man killall
3. ?
 
Ahh.. K... hat geklappt.
Also zumindest hab ich mal außerhalb von crontab das so eingegeben, und hat funktioniert :).

Geht das dann auch bei Crontab so, wie ich das eingegeben habe?

PHP:
*/5 * * * * kill pid test
*/5 * * * * screen -S test lynx .....

Jetzt schließt der alle 5 Minuten das Screenfenster test, und macht danach sofort wieder ein Neues !?


vg scrat :rolleyes:
 
Also es hat nich funktioniert. Es hat noch nich mal ein Fenster gestartet.

Nachdem ich die crontab fertig eingestellt hab, muss ich dann noch irgendwas machen, damit es das aktualisiert?

vg scrat :rolleyes:
 
und noch eine Möglichkeit:

./script.sh &disown

das startet das Script ebenfalls in seiner eigenen unabhängigen Shell.
 
Aber das ist ein PHP script, was eaccelerator benötigt... Und da ich eaccelerator über xampp hab, also nich direkt installiert is, kommt fehler, wenn ichs mit dem Befehl PHP ..... starte.

Und was ich in die crontab eingegeben hab, is richtig so? Weil da passiert garnix.

Und gibt es bei Lynx irgendwie ne Einstellungen, dass es die Seite automatisch aktualisiert? (Wie bei Opera z.b.)


vg scrat
 
Yet another useless suggestion:

Code:
([man]watch[/man] -n 123 [man]wget[/man] -q -O /dev/null http://example.com/ >/dev/null 2>&1 </dev/null &)&
Das "123" ist die Anzahl der Sekunden zwischen den Downloads der Seite, beenden kann man das Ganze mit "[man]killall[/man] watch". Die Klammern und die beiden &s sorgen dafür das watch von Anfang an ein Kind von [man]init[/man] ist und nicht von der Shell ist und deshalb wird beim Beenden der Shell/Konsole kein HUP an watch gesendet.
Und was ich in die crontab eingegeben hab, is richtig so? Weil da passiert garnix.
Wirf mal einen Blick in die dafür zuständige Log Datei...
 
Last edited by a moderator:
Hmmm.. Also das mit dem watch gefällt mir :)

Bloß das Problem dabei is, dass man da keine Befehle machen kann, die Vollbild erfordern, oder?

weil ich hab mal

watch --interval=30 lynx ....

eingegeben, und da is nix passiert...

Geht das, dass ich lynx irgendwie über den watch Befehl starten könnte?


vg scrat :rolleyes:
 
Hmmm ... Nun ...
Mir ist zwar die Gesamtproblematik so wie sie bisher beschrieben wird nicht wirklich transparent, hier scheinen wir ja von einem Detailproblem zum naechsten herum zu diskutieren, aber ich hatte eigentlich bisher den Eindruck gewonnen, es ginge darum einen konkreten http-request an einen http-server zu schicken und das Ergebnis abzuwarten, und das stetig wiederkehrend?:confused:
Nun genau dazu beschreibt der Oxe eine doch recht schoene Loesung, nur dass anstelle von lynx wget zum Einsatz kommt was sich fuer eine nicht-interaktive also nicht Dialog-Anwendung anbietet und genau das ist ja diese automatisierte Loesung.

Probier es nochmal mit des Oxens Loesung und aendere dort nur das Intervall und die aufzurufende URL.;)
Und sonst wuerde ich mich freuen, wenn mir klarer waere, warum es ueberhaupt lynx sein soll. :confused:

Ciao,
Mercy.
 
Mercenary said:
hier scheinen wir ja von einem Detailproblem zum naechsten herum zu diskutieren [...] Probier es nochmal [...]
Spielverderber, das wäre deine Möglichkeit gewesen auf [man]curl[/man], [man]GET[/man] oder [man]w3m[/man] usw. hinzuweisen ;)
Bloß das Problem dabei is, dass man da keine Befehle machen kann, die Vollbild erfordern, oder?
Mit Vollbild hat watch AFAIK keine Probleme aber die Befehle sollten sich selbstständig beenden wenn sie fertig sind. Damit Lynx das mach mußt du es wie folgt aufrufen:
Code:
(watch -n 123 [man]lynx[/man] [b]--dump[/b] http://example.com/ >/dev/null 2>&1 </dev/null &)&
Oder halt doch gleich wget...
 
Ok. das Probier ich noch mal :).

Geht das denn mit wget auch? Weil ich muss ja das script starten, und wenn ich doch aber wget mache, dann lädt er die Datei doch runter, oder!?


vg scrat :rolleyes:
 
Back
Top