# CronJob per PHP erstellen



## DivDax (16. August 2004)

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? 



gruß,
DivDax


----------



## saila (17. August 2004)

http://www.dclp-faq.de/q/q-php-zeitgesteuert.html hilft dir weiter. wenn nicht melden.


----------



## Sven Petruschke (17. August 2004)

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


----------



## Ben Ben (17. August 2004)

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


----------



## Fabian (17. August 2004)

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...*


```
#!/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...


----------



## DivDax (21. August 2004)

Echt klasse, dass es noch solche User wie dich gibt! 
Dein Script hat mir sehr geholfen, meine Pläne zu verwirklichen! 

Vielen vielen Dank!


----------



## mrnice_php (10. November 2010)

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);


----------



## Bello (2. Februar 2013)

* 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.


```
#!/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");
}

?>
```


----------

