User since
2006-01-19
192
Artikel
BenutzerIn
Hallo Profis,
habe mal wieder eine Frage:
Ich habe eine Liste mit URLs zu Daten, die ich per Script und Cronjob runterladen / aktualisieren möchte.
Ich mache das so: In einer Schleife nehme ich mir alle URLs, lasse die runterladen (LWP:Useragent) und lokal speichern. Hat das geklappt: nächste URL.
Nun habe ich ein Problem: Beim Test war eine URL (eine der ersten) nicht erreichbar. Mein Script hat nun endlos auf das Ergebnis gewartet und die nachfolgenden URLs gar nicht mehr bearbeitet.
Meine Frage: Wie erreiche ich, dass das Script pro URL 30 Sekunden auf das Ergebnis wartet und wenn es innerhalb dieser 30 Sekunden nicht kommt, diese URL abbricht und einfach die nächste URL in der Schleife bearbeitet?
Hoffe, das ist verständlich?!?
Danke schon mal,
Oliver
User since
2003-08-21
2614
Artikel
ModeratorIn
Vielleicht mit $SIG{ALRM} und alarm?
User since
2003-08-04
12208
Artikel
Admin1
kann man LWP::UserAgent keinen timeout mitgeben? das wäre dann sicher
sauberer als alarm().
User since
2006-01-19
192
Artikel
BenutzerIn
@ pq: Das wäre natürlich perfekt.
Ich habe es jetzt so versucht:
while (meine_bedingung) {
print $URL # zur kontrolle
$SIG{ALRM} = sub { next };
alarm 60;
tu_was_du_tun_sollst;
}
Es passiert folgendes: Die nicht erreichbare URL wird SOFORT übesprungen. Sie wird "zur Kontrolle" über print ausgegeben aber SOFORT wird auch die nächste Ausgegeben und korrekt bearbeitet.
Er wartet also gar nicht erst 60 Sekunden ab...?!?
Wenn ich versuche die "defekte" URL per Browser auszurufen, macht mein Browser nichts als mir die Sanduhr anzuzeigen.
Wieso ein solches?
User since
2003-08-04
12208
Artikel
Admin1
also in der manpage von
LWP::UserAgent steht
$ua->timeout(10);
hat das nicht funktioniert?
deine benutzung von alarm() ist so nicht korrekt. in perldoc -f alarm steht ja ein beispiel.
User since
2003-08-04
7321
Artikel
ModeratorIn
defualt von timeout ist 180 hat es einfach nur ewig (also drei minuten :) ) gedauert oder hat es echt gar nichts mehr getan?
User since
2006-01-19
192
Artikel
BenutzerIn
Ich denke ich muss mal "Kommando zurück" rufen...
Ich wollte eben Esskars 180 Sekunden überprüfen und habe daher das Script wieder in den Originalzustand gesetzt (alarm raus, etc). Jetzt ist das gleiche, wie ich es schon beschrieben habe... Das Script kommt zur betreffenden URL, schreibt en Namen (bearbeitet diese also), überspring die dann aber korrekt und macht weiter wie es soll...
Anscheinend hatt ich also irgendwo einen anderen Fehler, den ich mir jetzt zufällig wieder ausgebaut habe.
Ich weiß also nicht warum aber jetzt (im Moment) geht es...
Sollte mir da noch was auffallen, melde ich mich natürlich wieder.
Sorry, für die anscheinend unnötige (Denk-)arbeit...
Und vielen Dank natürlich!!
User since
2003-08-04
7321
Artikel
ModeratorIn
würde dir trotzdem empfehlen den timeout zu setzen!
User since
2005-04-14
684
Artikel
BenutzerIn
Hallo
Lustige Beiträge sehe ich hier...
> Ich habe eine Liste mit URLs zu Daten, die ich per Script und Cronjob runterladen / aktualisieren möchte
Ich kann es kaum glauben, dass niemand fragt wem die Urls denn gehören.
Seine können es nicht sein, sonst wüsste er, warum und wie er da gebklockt wird.
Ihr helft da IMHO blind beim Content-Diebstahl.
Es gibt Leute die leben von Ihren Webseiten und müssen ständig neue Techniken entwickeln, um sich vor Leuten, die nur mal eben ne Liste abarbeiten wollen, zu schützen.
Gruss Kristian\n\n
<!--EDIT|kristian|1152126999-->