phpbar.de logo

Mailinglisten-Archive

[php] Cronverwaltung mit pehape

[php] Cronverwaltung mit pehape

Dennis Sterzenbach lists at darknoise.de
Die Okt 28 20:14:30 CET 2003


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