CronJob per PHP erstellen

DivDax

Erfahrenes Mitglied
Hallo zusammen!

Ich möchte mir ein kleines Script basteln um CronJobs anlegen zu können etc.
Der Aufbau eines CronJobs ist mir soweit vertraut.
Mein Problem liegt nun darin CronJobs einzutragen bzw. zu löschen etc.

Kann mir da vielleicht jemand mir Rat und Tat zur Seite stehen? :D



gruß,
DivDax
 
Du kannst über die Funktionen [phpf]system[/phpf] und [phpf]exec[/phpf] Programme ausführen lassen (also auch die Kommandos zum Erstellen und Löschen von Cronjobs).

snuu
 
Für einen Cronjob musst du ja in die enstprechende Datei des jeweiligen Users lesen / schreiben.
Daher ist das einzige was du benötigst, die entsprechenden Recht der Cronjobdatei zu setzen, sodass der user Apache oder unter welchem User auch immer dein Webserver läuft drauf zugreifen kann.
Zu testzwecken kannst du auch gerne chmod 777 machen, was aber sehr unsauber ist.....


@saila

hab keine ahnung, aber frag doch mal bei pear nach
Hilft beides nicht weiter.... und ein Gruss von Deiner Shift-taste
 
Zuletzt bearbeitet:
Moin :-)

Ich hatte grad wenig zu tun und hab durch Zufall den Artikel "Using PHP As A Shell Scripting Language" gefunden. Das Script ist gemacht fuer Linux Shell Usage - laesst sich aber bestimmt umscripten fuer Webgeschichten. Einfach c&p - chmod +x filename.php && ./filename.php help ausfuehren.

EDIT: Ist jetzt v1.1...

Code:
#!/usr/bin/php -q

<?php

// INFORMATIONS
$written = "Fabian";
$version = "v1.1";
$name = "addcron.php";

// INPUT 
function read() {
    $fp=fopen("/dev/stdin", "r");
    $input=fgets($fp, 255);
    fclose($fp);
    return str_replace("\n", "", $input);
}

// TOUPPER Args
$arg = strtoupper($argv[1]);

// HELP
if ( $arg  == "HELP" ) {
 print("$name $version written by $written...\n\n");
 print("usage: $name add    (add a crontab to user)\n");
 print("       $name help   (show this screen, huh?)\n\n");
}

elseif ( $arg == "ADD" ) {

print("At which minute should the crontab run? Valid: 0-59,* Example: 15 or 15-25            : ");
 $min = read();
 str_replace(" ", "", $min);
 if ( $min == "" ) {
  $min = "*";
 } 

print("At which hour should the crontab run? Valid: 0-23,* Example: 23 or 11-13              : ");
 $hour = read();
 str_replace(" ", "", $hour);
 if ( $hour == "" ) {
  $hour = "*";
 }

print("On which day of the month should this crontab run? Valid: 1-31,* Example: 24 or 12-16 : ");
 $day = read();
 str_replace(" ", "", $day);
 if ( $day == "" ) {
  $day = "*";
 }

print("In which month should this crontab run? Valid: 1-12,* Example: 2 or 4-7               : ");
 $month = read();
 str_replace(" ", "", $month);
 if ( $month == "" ) {
  $month = "*";
 }
print("In which month should this crontab run? Valid: 1-12,* Example: 2 or 4-7               : ");
 $month = read();
 str_replace(" ", "", $month);
 if ( $month == "" ) {
  $month = "*";
 }

print("On which day of the week should this crontab run? Valid: 0-7,* Example: 6 or 2-5      : ");
 $week = read();
 str_replace(" ", "", $read);
 if ( $week == "" ) {
  $week = "*";
 }

print("Do you want to receive messages or errors from your script in an email?  Valid: y/n   : ");
 $mail = read();
 str_replace(" ", "", $mail);
 $mail = strtoupper($mail);
 if ( $mail == "" ) {
  $mail = "> /dev/null 2>&1";
 }
 elseif ( $mail == "N" ) {
  $mail = "> /dev/null 2>&1";
 }
 else { $mail = ""; }

print("The absolut path to your executable? Example: /home/$written/backup.sh                  : ");
 $prog = read();
 str_replace(" ", "", $prog);
 if ( $prog == "" ) {
  print("\nERROR! NO PROGRAM PATH GIVEN...\n\n");
 }
 else {
  exec("crontab -l > temp.cron");
  print("\nOkay, going to install the following crontab:\n\n");
  print("$min $hour $day $month $week $prog $mail\n\n");
  exec("echo \"$min $hour $day $month $week $prog $mail\" >> temp.cron");
  exec("crontab temp.cron");
  exec("rm temp.cron");
  print("... ADDED!\n\n"); 
 }
}

else {
 print("$name $version written by $written...\n\n");
 print("usage: $name add    (add a crontab to user)\n");
 print("       $name help   (show this screen, huh?)\n\n");
}

?>

Ich uebernehme keine Garantie ob's das perfekt geht - hier tut es das ;-). Wenn was kaputt geht - auch dein Problem. Code darf Veraendert werden wie es beliebt...
 
Zuletzt bearbeitet:
Echt klasse, dass es noch solche User wie dich gibt! :D
Dein Script hat mir sehr geholfen, meine Pläne zu verwirklichen! ;)

Vielen vielen Dank!
 
Wunderbar! Danke! Nachdem ich die function read() abgeändert habe, funktionierte es auch bei mir (php 5, ubuntu debian etch...):

$fp=fopen("php://stdin", "r");

// INPUT
function read() {
global $fp;
$input=fgets($fp, 1024);
return str_replace("\n", "", $input);
}

...

am ende dann sicherheitshalber noch

fclose($fp);
 
Anbei Version v1.2
Als lokale Datei unter Debian getestet. ist aber jedoch nicht geeignet als Funktion in einer Webseite.
In der Shell kann man ja gleich crontab -e eingeben und hat keine Kopfschmerzen.

Code:
#!/usr/bin/php -q
<?php
// INFORMATIONS
$written = "Fabian";
$version = "v1.2";
$name = "addcron.php";

// INPUT 
function read() {
    $fp=fopen("/dev/stdin", "r");
    $input=fgets($fp, 255);
    fclose($fp);
    return str_replace("\n", "", $input);
}

// TOUPPER Args
$arg = strtoupper($argv[1]);

// HELP
if ( $arg  == "HELP" ) {
 print("$name $version written by $written...\n\n");
 print("usage: $name add    (add a crontab to user)\n");
 print("       $name help   (show this screen, huh?)\n\n");
}

elseif ( $arg == "ADD" ) {

print("At which minute should the crontab run? Valid: 0-59,* Example: 15 or 15-25            : ");
 $min = read();
 str_replace(" ", "", $min);
 if ( $min == "" ) {
  $min = "*";
 } 

print("At which hour should the crontab run? Valid: 0-23,* Example: 23 or 11-13              : ");
 $hour = read();
 str_replace(" ", "", $hour);
 if ( $hour == "" ) {
  $hour = "*";
 }

print("On which day of the month should this crontab run? Valid: 1-31,* Example: 24 or 12-16 : ");
 $day = read();
 str_replace(" ", "", $day);
 if ( $day == "" ) {
  $day = "*";
 }

print("In which month should this crontab run? Valid: 1-12,* Example: 2 or 4-7               : ");
 $month = read();
 str_replace(" ", "", $month);
 if ( $month == "" ) {
  $month = "*";
 }

print("On which day of the week should this crontab run? Valid: 0-7,* Example: 6 or 2-5      : ");
 $week = read();
 str_replace(" ", "", $week);
 if ( $week == "" ) {
  $week = "*";
 }

print("Do you want to receive messages or errors from your script in an email?  Valid: y/n   : ");
 $mail = read();
 str_replace(" ", "", $mail);
 $mail = strtoupper($mail);
 if ( $mail == "" ) { $mail = "> /dev/null 2>&1"; }  elseif ( $mail == "N" ) { $mail = "> /dev/null 2>&1";} else { $mail = ""; }

print("The absolut path to your executable? Example: /home/$written/backup.sh                  : ");
 $prog = read();
 str_replace(" ", "", $prog);
 if ( $prog == "" ) { print("\nERROR! NO PROGRAM PATH GIVEN...\n\n");}
 else {
  exec("crontab -l > temp.cron");
  print("\nOkay, going to install the following crontab:\n\n");
  print("$min $hour $day $month $week $prog $mail\n\n");
  exec("echo \"$min $hour $day $month $week $prog $mail\" >> temp.cron");
  exec("crontab temp.cron");
  exec("rm temp.cron");
  print("... ADDED!\n\n"); 
 }
}

else {
 print("$name $version written by $written...\n\n");
 print("usage: $name add    (add a crontab to user)\n");
 print("       $name help   (show this screen, huh?)\n\n");
}

?>
 
Zuletzt bearbeitet:
Zurück