Vertagen von Perlscripts
Frank Scharffenberg
- perl
0 HaPe0 Andreas Bierhals
Ein CGI-Script soll bis zu einem bestimmten Ereignis mehrer Tage in einer Endlosschleife laufen und einmal täglich abhängig von div. Daten eine Mail schicken. Damit das Script in den restlichen 23h 59min nicht Rechenzeit von Server frisst (getdate in while-schleife bis zum neuen Datum oder so), suche ich eine Möglichkeit, das Script mittels Perlfunction (sleep, wait...??? oder so was...) zu vertagen. Welche Function gibt die Steuerung "richtig" an das OS zurück und erhält die Rechenzeit erst wieder nach Ablauf der gewünschten Zeit? (Der Server meines Providers läuft unter SUN Solaris.)
Vielen Dank für die Antwort(en) im Voraus, Gruß Frank
Ein CGI-Script soll bis zu einem bestimmten Ereignis mehrer Tage in einer Endlosschleife laufen und einmal täglich abhängig von div. Daten eine Mail schicken. Damit das Script in den restlichen 23h 59min nicht Rechenzeit von Server frisst (getdate in while-schleife bis zum neuen Datum oder so), suche ich eine Möglichkeit, das Script mittels Perlfunction (sleep, wait...??? oder so was...) zu vertagen. Welche Function gibt die Steuerung "richtig" an das OS zurück und erhält die Rechenzeit erst wieder nach Ablauf der gewünschten Zeit? (Der Server meines Providers läuft unter SUN Solaris.)
Vielen Dank für die Antwort(en) im Voraus, Gruß Frank
Hallo Frank,
ich glaube was Du suchst, dürfte das da sein.
select(undef,undef,undef,0.1);
Soweit ich weiß, ist die Angabe 0.1 in Millisekunden.
Bei deinem Vorhaben sehe ich aber noch ein anderes, besser zwei andere Probleme.
1. Wie lange läßt die Konfiguration "Deines" Webservers das Script laufen? Ich glaube nicht, daß Dein provider dies mehrere Tage zuläßt.
2. Wird das Script nicht automatisch gekillt, wenn der Browser die Seite verläßt?
Bitte korrigiert mich, wenn ich da falsch liege ;-)
Weitere Frage wäre: ist es unbedingt notwendig, daß die Mail auf die Minute genau zu einer bestimmten Tageszeit abgeschickt wird?
Wenn nicht, dann könntest Du, Immer wenn Deine Homepage oder sonstige Seite aufgerufen wird, überprüfen, ob HEUTE schon die Mail verschickt wurde, wenn nicht dann tue es und wenn ja dann warte auf die nächste Aktion. Das hat auch den Vorteil, daß wenn der Server mal ausfällt, Dein Script davon nicht betroffen ist.
Gruß HaPe
Hallo,
also cgi-Skripte, die mehrere Tage lang laufen, kommen mir ziemlich exotisch vor. Normalerweise soll ja ein cgi-Skript mit einer Rückgabe an den Browser beendet werden, und wer läßt schon mehrere Tage den Browser offen ;-)
Alternativ-Vorschlag - Definiere einen cron-Job (der Server läuft ja unter Sun...), der jeden Tag eine eMail an mehrere Adressaten schickt. Die Mail-Adressen können z.B. in irgendeiner Ascii-Datei stehen, auf die der cron-Job zugreift. Der Inhalt der mail z.B. in einer anderen Datei oder Datenbank - im Grunde hat so'n cron-Job ja alle Freiheiten... Das cgi-Skript würde sich dann bloß darauf beschränken, eine neue eMail-Adresse dieser Ascii-Datei hinzuzufügen, sobald jemand diesen Mail-Dienst anfordert.
Ich weiß natürlich nicht, ob Du derartigen Zugriff auf den Server hast, daß Du dort einen cron-Job einrichten kannst.
Viele Grüße
Andreas