Cronjobs von Zuhause aus mit cURL | 19. April 2006 um 15:03 Uhr / Programmierung
Vor ein paar Tagen berichtete Manuela über Cronjobs kostenlos - Cronjob.de. Dieser dienst fordert, so weit ich das verstanden habe, eine zur angegebenen Zeit eine Seite auf dem eigenen Webspace an, hinter der sich dann zum Beispiel ein Datenbank-Sicherungs-Script verbirgt. Da kam mir die Idee,das man sich, wenn der eigene Rechner sowieso, wie meiner, durchläuft, oder wenn man einen anderen Server mit Cronjob möglichkeit hat, gar nicht auf Cronjob.de verlassen muss.
cURL
cURL hatte ich ja schon einmal in einem früheren Posting über Manuelle Trackbacks vorgestellt. Es ist ein Programm für die Kommandozeile um Resourcen über HTTP, FTP und andere Protokole abzufragen. cURL verhält sich dabei wie ein ganz normaler Browser und kann auch Cookies, Passwörter und andere schöne Sachen. Wenn man dann z.B. ein PHP Script hat, welches eine bestimmte Aufgabe erledigt kann man es entweder von Hand über den Browser (Firefox, Opera, etc.) aufrufen, oder in die Kommandozeile etwas in dieser Art reinschreiben:
curl http://example.com/dump.php
… was die gleiche Wirkung hat, nur dass die Ausgabe dann in der Kommandozeile erfolgt. Falls man das umleitet sogar in eine Datei:
curl http://example.com/dump.php -o dump.sql.tar.gz
Sinnvoll ist es dabei die Daten auf dem Server gleich zu zippen (packen) um Traffic über das Internet, und Platz auf der Festplatte zu sparen. Wunderbar, aber wo ist dabei der Vorteil gegenüber dem Aufrufen im Browser?
Cronjob, bzw. Taskplaner
Ok, die Unixer/Linuxer werden wohl fast alle irgendein cron Programm installiert haben. Aber auch die, die unter Windows leiden arbeiten haben auf ihrem System so eine Funktionalität, dort heißt es Taskplaner. Ich gehe hier jetzt nicht näher auf die Installation und Konfiguration der Programme ein, sondern verwise mal auf unixgeeks | Intro to cron (Englisch) und Microsoft | Planen eines neuen Tasks.
Und nun die Verschmelzung
Ja ihr habt richtig geraten, diese zwei Programme können zusammenarbeiten, denn cron, bzw Taskplaner sind nur für das Ausführen von anderen Programmen in bestimmten Zeitabständen, bzw. zu einem Bestimmten Zeitpunkt zuständig. Das schöne ist, dass alles komplett im Hintergrund abläuft, am besten noch nachts, wenn sowieso niemand am Rechner sitzt.
Man konfiguriert also cron/Taskplaner so, dass er zum Beispiel jeden tag um 3:00 Uhr nachts diesen Befehl ausführt:
curl http://example.org/dump.php -o "C:/Dokumente und Einstellungen/Administrator/Eigene Dateien/Backups/example_org.sql.tar.gz"
Dann ruft der Rechner diese Seite auf uns speichert die Ausgabe in der Datei example_org.sql.tar.gz ab. Die Anführungszeichen sind dazu da, damit die Leerzeichen im Pfad als zum Pfad dazugehörig angesehen werden.
Man kann das Script die Daten aber auch direkt auf dem Server speichern lassen und die Ausgabe mit -s unterdrücken, oder einfach verwerfen. Man kann sein Script auch Passwortgeschützt mit .htaccess oder sonst wie sichern. Weitere Informarionen zu cURL findet man auf Englisch auf der cURL manpage.
Wie oben erwähnt ist man nun von externen Diensten unabhängig, so lange der Rechner Zugang zum Internet hat. Wenn man vielleicht sogar einen Bekannten hat, der noch ein paar cronjobs auf seinem Server frei hat, kann man diese somit auf für den eigenen Server, welcher ohne diese Funktionalität auskommen muss, nutzen. Und nun viel Spaß beim cronen und cURLen ;-).
Pingbacks
Kommentare
Die Kommentare sind für diesen Eintrag geschlossen.




abonnieren.
Felix Riesterer aus Deutschland, Baden-Wuerttemberg schrieb am 20.04.2006
Hi Jeena!
Gerade dieser Tage habe ich eine solche Funktion benötigt, um ein Bild einer Web-Cam im 30-Minuten-Takt auf unseren Webspace zu laden.
Ich kenne cURL nicht, sondern habe lynx benutzt, um das PHP-Script (auf einem Apachen im Intranet) aufzurufen. Wahrscheinlich wäre cURL die edlere Lösung gewesen, aber lynx hatte ich in der SuSE-DVD schon dabei...
Ich freue mich, bei diesem Thema inzwischen mitreden zu können!
Liebe Grüße,
Felix Riesterer.
Jeena Paradies aus Varberg schrieb am 21.04.2006
cURL ist auf der SuSE DVD auch dabei, das zählt nicht als Ausrede ;-). Ne der vorteil ist einfach dass man damit auch an passwortgeschützte Seiten kommt und auch Formulardaten per POST verschicken kann und andere Sachen eben, die über das reine Aufrufen mit eventuellen GET Parametern drübergehen.
Und Heute fand ich auch gleich eine wunderbare Anwendung für das ganze. Ich bin ja auf der Suche nach einer Wohnung und es gibt hier ein paar Seiten im Netz, die kleinanzeigen mit Mietwohnungen führen. Ich müsste diese seiten aber jedes mal von hand aufrufen und durchsuchen und das am besten oft, damit ich einer der ersten bin, die sich da beim Vermieter melden. Ich schrieb mir also ein Script in Ruby welches ich hier auf dem Server geparkt habe, weil mein Provider mich keine Mails von meinem Rechner aus verschicken lässt. Dieses Script durchsucht die angegebene Seite und meldet mir per E-Mail wenn es für mich interessante Wohnungsanzeigen gibt. Ich habe es erst einmal auf alle 6 Stunden eingestellt, mal schauen wie es sich bewehrt.
Ich habe mal den Code hochgeladen, ist keine "rocket sience" aber vielleicht interessiert es den einen oder anderen wie so ein Ruby script aussieht ;-).
#!/usr/bin/ruby -w require 'cgi' require 'uri' require 'net/http' # GET Variablen holen und speichern cgi = CGI.new # URI in notwendige Teile zerlegen uri = URI.parse(cgi['url']) # HTML Seite vom anderen Server holen res = Net::HTTP.start(uri.host, uri.port) do |http| http.get(uri.path + '?' + uri.query) end # Empfangene HTML Seite nach übergebenem # Text durchsuchen rex = Regexp.new(cgi['text'], true) wohnung = rex.match(res.body) # Wenn text nicht gefunden dann E-Mail verschicken # Text ist hier z.B. "Leider nichts gefunden" if wohnung.nil? msgstr = <<MAILTEXT From: Wohnungssuche <spam@jeenaparadies.net> To: Jeena Paradies <spam@jeenaparadies.net> Subject: Wohnung in Varberg gefunden Es wurde eine Wohnung in Varberg frei, siehe: #{cgi['url']} MAILTEXT # E-Mail verschicken require 'net/smtp' Net::SMTP.start('jeenaparadies.net', 25) do |smtp| smtp.send_message msgstr, 'spam@jeenaparadies.net', 'spam@jeenaparadies.net' end end # Damit keine Fehler beim aufrufen auftauchen # sende ich noch die richtigen Header puts "Content-type: text/html\n\n"Damit und mit Hilfe von cURL und cron kann ich jetzt automatisch alle Kleinanzeigenseiten alle paar Stunden durchuchen lassen, ohne einen Finger dafür krumm machen zu müssen :-).
Dennis schrieb am 23.04.2006
In der Tat, Jeena - mal interessant so ein Ruby-Script zu sehen ;-)
Gilt in Ruby der Zeilenumbruch als Befehls-Trenner? Hm, das gefällt mir nicht so... Da muss ich die ganze Zeit an VisualBasic denken :-\
Sven schrieb am 24.04.2006
Gebräuchlicher als curl ist meines Erachtens heute wget - in vielen Linux-Distributionen wird das jedenfalls standardmäßig eingesetzt. Die Funktionsweise ist natürlich analog ;)
Grüße,
Sven
Dennis schrieb am 28.04.2006
Ich würde dir nicht zustimmen, dass wget gebräuchlicher ist als curl, erst recht nicht heutzutage - man kann wget und curl meiner Meinung nach nicht so einfach vergleichen, da die Anwendungsziele zwei verschiedene sind:
* wget: Abrufen von URLs, das gerne auch rekursiv, gedacht
* curl: Abrufen von URLs aber mehr um ganz bestimmte Requests an den Server zu schicken, z.B. mit speziellen Post-Daten, Cookies etc.
Es ist einfach so, dass curl dir einen größeren Funktionsumfang bietet, du kannst es z.B. nutzen indem du es in eigene Projekte integrierst um irgendwelche Aktionen über HTTP auszulösen. Trotzdem würde ich curl nicht verwenden um z.B. eine zip-Datei herunterzuladen und zu speichern, dazu ist dann wiederum wget besser geeignet.