Laufenden Prozess beenden mit Timeout?

  • Hallo


    Mal wieder eine Aufgabe :-)).


    Lynx besitzt eine "timeout" option, laut Doku wirkt die aber nicht bei allen Servern.


    Schaut so aus:

    Code
    lynx -dump --timeout=10 $DL_URL | $LYNXOP | sed -e '/^[ ]*$/d'" >$tmp/tmp1.$$


    Das Problem ist aber das man schon mal eine Stunde warten kann, wenn der timeout nicht greift.


    Nun habe ich es im moment so:

    Code
    ---timeout.sh---
    ...
    sleep 25; killall lynx
    ...


    Und von hier wirds aufgerufen:

    Code
    ---dlmngr.func---
    ...
    timeout.sh &
    lynx -dump $DL_URL | $LYNXOP | sed -e '/^[ ]*$/d'" >$tmp/tmp1.$$
    ## wenn lynx "erfolg" hatte gehts ja hier weiter, dann kann die timeout.sh beendet werden.
    if test -n "`pgrep timeout`"; then
        $(pkill timeout)
    fi
    ...


    Hat jemand einen Plan wie ich das ohne die "extra" timeout.sh realisieren kann, also alles in der "dlmngr.func" habe?


    Hab auch schon an "at" gedacht, aber da muß die Prozessnummer bekannt sein, um die "Schlange" zu löschen :-((.


    Naja und "at" hat ja nun einmal auch nicht jeder Installiert, bin mir sicher das es da irgend etwas geben muß?


    Wie Handhabt man sowas normal?


    Der Rückgabewert von lynx ist auch nicht zu gebrauchen, ein "Rückgabe" ist ja auch erst vorhanden wenn Lynx fertig ist?


    Na und so richtig mit zig mal in den Hintergrund schieben und killen gefählt es mir auch nicht, kennt wer eine bessere Lösung? Wie:


    Führe Kommando aus, gebe einen Wert mit, falls das Programm (lynx) immer noch nach der Zeit läuft, beende es?


    Es ist übrigens nicht nur Lynx, wo der timeout nicht will, scheint an den Protokollen zu liegen.


    MFG Ronny

  • hmmm, vielleicht nur eine Dumme idee, aber du nutzt oben bei den Parametern einmal "-" und einmal "--", ist das vielleicht falsch?
    Ansonsten schau mal genau in der Manpage nach, bei links (lynx ist hier nicht installiert derzeit) gibts 2 getrennte Parameter für request und receive, vielleicht schraubst du ja gerade am falschen.
    Wie gesagt, sind nur dumme Ideen.....

  • Sorry war ein Schreibfehler, habe es mit einem "-" :-)).


    Code
    # lynx options, e.g:
    lynx_opt="-connect_timeout=10"


    Ist wirklich so, der "timeout" funktioniert bei einiegen Servern nicht, habe es auch schon woanders gelesen.


    MFG Ronny

  • hi,
    wie wäre es anstatt lynx wget zu benutzen.
    ich denke mal das ist scriptmäßig besser zu steuern, es ist ja gerade dafür ausgelegt.
    ich hab mir gestern egrade damit ein upload-script gebastelt (das war aber auch einfach, weil der server im lan immer zu erreichen ist)
    alternativ kann ich dir auch noch NET::FTP von perl empfehlen. das modul ist wirklich super einfach zu bedienen - hab sogar ich hinbekommen. dort sollte es auch sowas wie timeout geben. oder halt die LWP (libwwwperl), die kann so ziemlich das geliche wie lynx, hat aber VIELE anhängigkeiten.


    direkt zum lynk kann ich leider nix sagen.

  • Hi


    Nicht möglich wget zu nutzen, von vielen pages bekomme ich keinen index mit wget erzeugt ("-C"), hatte es auch mal am Anfang probiert an lynx führte kein weg vorbei, bei 30% ging es mit wget definitiv nicht.


    Hm und Lynx benötigt man für ein Plugin so lag es ziehmlich nahe, dieses zu nutzen.


    MFG Ronny

  • hi,
    wenn ich das richig sehe (mir so im kopf vorstelle) willst du also die index-pages laden, das ganze parsen und dann die verschiedenen versionen zum downloads anbieten.
    ist das so korrekt?
    für welcheas plugin braucht man den lynx? ein solches hab ich bisher noch nicht benutz. würde mich aml interessieren.
    mfg carsten

  • hi,
    ich hab mal ein wenig probiert mit wget. eigentlich bekomme ich immer eine indexseite. außer wenn die leute in dem download-ordner eine eigene index.html liegen haben, dann klappt das natürlich nicht.
    bei welche seiten (/plugins) klappt denn nicht?
    wget bietet nämlich eine "--timeout" option mit an. das wäre ja schon irgendwie passend für dich.


    das mit perl ist eher keine so gut idee von mir gewesen - das hat sehr viele abhängigkeiten. die kann man zwar auch über die cpan-shell installieren, das ist dann aber overkill.


    edit:
    ich hab was gefunden: 8)
    http://packages.debian.org/unstable/admin/timeout.html
    ist aber wieder ein zusätzliches programm :(

  • Hallo


    Das ist genau das was ich gesucht habe :-)), es ist ein Set von tools, timeout ist nur eines, kann man ja als Binäry mit beilegen, 35,8 KB ist schließlich nicht die welle, so würden auch endlich die timeouts aufhören bei gewissen Servern, da bleiben nähmich die Scripts hängen.


    Habe es mal angehangen, dennoch habe ein Problem, bekomme den output nicht umgeleitet:


    So gehts wunderbar:

    Code
    ./timeout 15 lynx -connect_timeout=10 -dump http://switch.dl.sourceforge.net/sourceforge/lirc | grep '.bz2$' | awk '{ print $2 }'


    So wie ich es brauchen würde nicht:

    Code
    ./timeout 15 lynx -connect_timeout=10 -dump http://switch.dl.sourceforge.net/sourceforge/lirc | grep '.bz2$' | awk '{ print $2 }' >$tmp/tmp1.$$


    Mal sehen ob man das mit "tee" vielleicht abgreifen kann.


    MFG Ronny

  • gut,
    freut mich das die lösung für dich passt.


    die umleitung funzt bei mir aber. jednefalls unter einer xterm:

    Code
    slime@slime:~$ timeout 15 lynx -connect_timeout=10 -dump [URL]http://switch.dl.sourceforge.net/sourceforge/lirc[/URL] | grep '.bz2$' | awk '{ print $2 }'
    [URL]http://switch.dl.sourceforge.net/sourceforge/lirc/lirc-0.6.4.tar.bz2[/URL]
    [URL]http://switch.dl.sourceforge.net/sourceforge/lirc/lirc-0.6.5.tar.bz2[/URL]
    [URL]http://switch.dl.sourceforge.net/sourceforge/lirc/lirc-0.6.6.tar.bz2[/URL]
    [URL]http://switch.dl.sourceforge.net/sourceforge/lirc/lirc-xmms-plugin-1.3.tar.bz2[/URL]
    [URL]http://switch.dl.sourceforge.net/sourceforge/lirc/lirc-xmms-plugin-1.4.tar.bz2[/URL]
    [URL]http://switch.dl.sourceforge.net/sourceforge/lirc/xirw-0.4.2.tar.bz2[/URL]
    [URL]http://switch.dl.sourceforge.net/sourceforge/lirc/xrc-0.6.4.tar.bz2[/URL]
    slime@slime:~$ timeout 15 lynx -connect_timeout=10 -dump [URL]http://switch.dl.sourceforge.net/sourceforge/lirc[/URL] | grep '.bz2$' | awk '{ print $2 }' > testfile
    slime@slime:~$


    ich hab das timeout für woody/stable einfach mit apt-get geladen.
    version ist


    vielleucbt hast du ja eine neuere version die z.B. alles auf stderr macht. wäre denkbar

  • Ja geht nun auch hier .....


    Hast Du einen Plan wie man den "Kill" unterdrücken kann, schaut nähmlich nicht wirklich schön aus auf der Konsole:


    Please be patient, while loading ....


    Timeout: aborting command ``lynx'' with signal 9
    ./setup.sh: line -164: 21825 Killed timout 15 lynx -dump $DL_URL >$tmp/tmp1.$$


    1. Message: 'gzip: *TMP.html.gz: unexpected end of file' ....
    Hint: You need a never Version of lynx!


    2. Message: 'Can't access startfile' URL ....
    Hint: Mayby Server not available at the moment?
    Check this URL in DIVX4LINUX.cmd :
    http://unc.dl.sourceforge.net/sourceforge/avifile


    3. Message: Timeout...
    Hint: Hard Timeout, see Pount 2


    Use Enter .....


    Ich möchte aber nur den "kill" von "timeout" unterdrücken, nicht die Ausgabe von Lynx?


    Oder noch besser, anstatt:


    Timeout: aborting command ``lynx'' with signal 9
    ./setup.sh: line -164: 21825 Killed timout 15 lynx -dump $DL_URL >$tmp/tmp1.$$


    würde mir ein "Timeout" langen .....

  • hi,
    also die erste zeile kommt ja von dem timeout-command.
    da wirst du nicht drumrumkommen da mal in die sourcen zu sehen und das printf auszukommentieren.


    die zweite zeile kommt von der bash. das könnte man evtl. durch einen paramter beim staren von setup.sh unterdrücken. von bash hab ich aber nicht wirklich ahnung.


    edit:

    Zitat

    The shell learns immediately whenever a job changes state. Normally, Bash waits until it is about to print a prompt before reporting changes in a job's status so as to not interrupt any other output. If the `-b' option to the set builtin is enabled, Bash reports such changes immediately (see section 4.3 The Set Builtin). Any trap on SIGCHLD is executed for each child process that exits.


    habe ich von hier:
    http://www.gnu.org/manual/bash…l_mono/bashref.html#SEC87

  • Naja dann muß man halt mit leben, ist alles in einer function "set +x", wenn ich die Message von timeout unterdrücke, passiert das selbe mit dem lynx output. (das ist aber nicht gewollt)


    Auch schon probiert:

    Code
    exec 1>$HOME/log 2>$HOME/log


    Was solls, lieber einmal einen häßlichen Screen, wie 10 Minuten auf lynx zu warten :]


    Eine andere Alternative giebt es nicht, mit "ping" auch schon mal rumgespielt, ist das selbe, es giebt Server wo alle Programme versagen, inc wget trotz timeout option, wie gesagt habe es mal irgendwo gelesen, mal schauen ob ichs noch finde.


    MFG Ronny

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!