Mailinglisten-Archive |
Nico Haase wrote: >>Versuchs mal mit den Links, die ich bereits einmal auf eine Frage zu >>"Cronjobs verwalten" gepostet habe: >> >><snip> >>http://freshmeat.net/projects/pseudocron/?topic_id=90%2C92 %2C243%2C914 >>http://freshmeat.net/projects/ppcron/?topic_id=253%2C861 >>http://freshmeat.net/projects/phpcron/?topic_id=96 >></snip> > > > Endlich, deine Ursprungsmail mit den Links habe ich schon gelöscht, > kann ich was dazu sagen. Ich finde die Programme sehr umständlich. >Eigentlich wäre es doch ein leichtes, ein Skrübt zu schreiben, welches per >script.php start aufgerufen würde und einfach nur vorher darin mit Webinterface >eingestellte Crons startet. Da ich mich dank neuem Server jetzt auch stark auf >die Cronjobs verlasse, die Einstellungen aber nur dank der Installation von Webmin >durch meinen Hoster wirklich hinbekomme, wäre ein solches Script ganz nett.... > Nico Moin moin warum baust Du das Script dann nicht einfach, wenn es "ein leichtes" ist? Im übrigen sind diese "script.php start" Dinge eher init Scripte, und keine Einträge die in einer Cron Tabelle stehen werden. Ich habe mir die Einträge bei Freshmeat ehrlich gesagt nicht wirklich richtig angeschaut, sondern vielmehr aus der Liste meiner Script-DB rausgesucht und gepostet. Das heißt: ich kenne nicht alle Features der Projekte. Auf jeden Fall hier mal grad runtergetippert eine mögliche, aber Quick-and-dirty Lösung (Achtung! ungetestet!): cron-liste.php: <?php $cron = array( "0 1 * * * backup.php", // täglich um 1Uhr ein Backup erzeugen "0 0 1 * * roll-logs.php"// um 0Uhr am 1. im Monat Logdateien rollen ); ?> mycron.php: #!/usr/local/bin/php <?php // diese Datei (oder eine andere Quelle von mir aus) // liefert Cron Einträge (Format: siehe Kommentar in der foreach). include_once "cron-liste.php"; /* Ein Eintrag ist formatiert genau wie die cron-Einträge auch (siehe man 5 crontab): field allowed values ----- -------------- minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sun, or use names) */ // nun holen wir uns noch flott die aktuellen Werte $now_chunks = explode(" ", date('i H d m w')); $nowmin = intval($now_chunks[0]); $nowh = intval($now_chunks[1]); $nowDoM = intval($now_chunks[2]); $nowMonth = intval($now_chunks[3]); $nowDoW = intval($now_chunks[4]); // und ab gehts durch das Array mit Cron Einträgen foreach ($cron AS $croneintrag) { // die Einzelwerte aus dem Eintrag holen $chunks = explode(" ", $croneintrag); if (count($chunks) < 5) { break; // Fehler, Crontab ist wohl zerschossen, // oder dieser Eintrag Gülle. } $minute = $chunks[0]; $hour = $chunks[1]; $dayOfMonth = $chunks[2]; $month = $chunks[3]; $dayOfWeek = $chunks[4]; $command = $chunks[5]; // und gucken ob der Eintrag ausgeführt werden muss if ((intval($minute) != $nowmin) && ($minute != '*')) { // weder aktuelle Minute, noch der Wildcard * // (*=alle Minuten) angegeben => also muss dieser // Command nicht ausgeführt werden und es kann direkt // mit dem nächsten weitergehen. continue; } if ((intval($hour) != $nowh) && ($hour != '*')) { continue; } if ((intval($dayOfMonth) != $nowDoM) && ($dayOfMonth != '*')) { continue; } if ((intval($month) != $nowMonth) && ($month != '*')) { continue; } // anpassen, wenn Mon ... Sun zusätlich unterstützt werden sollen: if ((intval($dayOfWeek) != $nowDoW) && ($dayOfWeek != '*')) { continue; } // jetzt Befehl, der in $command steht ausführen... } ?> -- Dennis Sterzenbach http://www.darknoise.de/
php::bar PHP Wiki - Listenarchive