php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.12.2009, 12:09  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard [Erledigt] Cronjob per PHP erstellen

hallo zusammen,

ich bin Heute schon die ganze Zeit am suchen aber finde weder bei google, noch in diversen Foren was ich suche.

Mein Frage ist:
Wie kann man einen Cronjob per PHP erstellen, wenn dies überhaupt geht?

Das Hauptproblem dabei ist, dass sämtliche Dateien, wo die Cronjobs eingetragen sind entweder root-Zugriff erfordern oder nicht zum direkten bearbeiten gedacht sind. Die einzige Möglichkeit einen Cronjob zu erstellen ist mit dem Befehl 'crontab -e', dadurch wird jedoch ein Editor (z.B. vi oder nano) aufgerufen, diesen dann per PHP zu steuern dürfte ziemlich schwer bis unmöglich sein.

ich hoffe jemand kann mir dabei weiter helfen

lg
draco
draco88 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.12.2009, 12:40  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Gar nicht. Cron arbeitet ausschließlich auf Basis von Dateien. Wenn du keinen Zugriff auf die Dateien hast, hast du verloren.

Es gibt jedoch beispielsweise bei SuSE eine Alternative. So besitzt jeder User eine eigene "cron-daily" usw. Auf diese Dateien hat man logischerweise Zugriff. Das kommt aber auf die Distribution drauf an.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 01.12.2009, 13:32  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Manchmal bringt es doch etwas die man-Pages ein zweites und ein drittes mal durch zu lesen

mit dem Befehl crontab kann man ja auch eine x beliebige Datei einlesen und in die Crontab Datei eintragen lassen.

Hab das ganze in ne Klasse gepackt, falls es einen interessiert wie ich's gelöst habe.
PHP-Code:
<?php
/**
 * @author Mark Wecke <mark.wecke@googlemail.com>
 * @license free :P
 */
class Crontab {
    
/**
     * Speichert die geparsten Einträge aller eingetragenen Cronjobs des Users
     *
     * @var array
     */
    
protected $rows = array();

    public function 
__construct() {
        
$this->_parse();
    }

    
/**
     * Liest alle eingetragenen Cronjobs des Users aus und parst sie in ein Array
     */
    
protected function _parse() {
        
$rows = array();
        
exec('crontab -l'$rows);
        foreach(
$rows AS $row) {
            
$this->rows[] = preg_split('/\s+/'trim($row), 6);
        }
    }

    
/**
     * Entfernt alle Whitespaces aus dem Hinzugefügten Cronjob
     * Wird auf alle Felder bis auf das Command Feld angewendet
     *
     * @see Cronjob::add()
     * @param string $cell
     * @return string
     */
    
protected function _sanitize($cell) {
        return 
preg_replace('/\s+/'''$cell);
    }

    
/**
     * Liefert alle Cronjobs als Array
     *
     * @return array
     */
    
public function getAll() {
        return 
$this->rows;
    }

    
/**
     * Findet alle eingetragen Cronjobs die mit den Suchparameters übereinstimmen
     * <dl>
     *  <dt>minute, hoer, dom(day of month), month, dow(day of week), command</dt>
     *  <dd>Sucht in dem entsprechenden Feld, find nur komplette übereinstimmungen</dd>
     *  <dt>commadSW</dt>
     *  <dd>Findet alle Einträge die mit dem übergebenen Wert anfangen</dd>
     *  <dt>commandPM</dt>
     *  <dd>Findet alle Einträge auf die der übergebene RegEx passt(muss mit delimiter übergeben werden)<br />Beispiel:<br />
     *  /# Comment ID1$/ - findet alle Einträge mit dem Kommentar '# Comment ID1' am Ende
     *  </dd>
     * </dl>
     * Beispiel:<br />
     * <pre>
     * $crontab = new Crontab();
     * $crontab->find(array(
     *     'hour' => 12,
     *     'commandSW' => 'php '
     * ));
     * </pre>
     * Findet alle Cronjobs die zwischen 12 und 12:59 aufgerufen werden und des Befehl mit 'php ' startet
     *
     * @param array[optional] $spec
     * @return array
     */
    
public function find(array $spec=array()) {
        
$result = array();
        foreach(
$this->rows AS $i => $row) {
            if((!isset(
$spec['minute'])  || $spec['minute'] == $row[0])
            && (!isset(
$spec['hour'])    || $spec['hour'] == $row[1])
            && (!isset(
$spec['dom'])     || $spec['dom'] == $row[2])
            && (!isset(
$spec['month'])   || $spec['month'] == $row[3])
            && (!isset(
$spec['dow'])     || $spec['dow'] == $row[4])
            && (!isset(
$spec['command']) || $spec['command'] == $row[5])
            && (!isset(
$spec['commandSW']) || $spec['commandSW'] == substr($row[5], 0strlen($spec['commandSW'])))
            && (!isset(
$spec['commandPM']) || preg_match($spec['commandPM'], $row[5]))
            ) { 
                
$result[$i] = $row;
            }
        }
        return 
$result;
    }

    
/**
     * Entfernt alle Cronjobs die mit den Suchparameters übereinstimmen<br />
     * gleiche Suchparameter wie Crontab::find() und zusätzlich 'row' damit kann gezielt eine Zeile gelöscht werden
     *
     * @param array $spec
     * @return int Anzahl der gelöschten Zeilen
     * @see Crontab::find()
     */
    
public function remove(array $spec) {
        if(isset(
$spec['row'])) {
                unset(
$this->row[$spec['row']]);
                return 
true;
        }
        
$rows $this->find($spec);
        foreach(
$rows AS $i => $row) {
            unset(
$this->row[$i]);
        }
        return 
count($rows);
    }

    
/**
     * Benötigt ein sechs Spalten numerisches Array mit den Feldern: <br />
     * Minute, Stunde, Tag im Monat, Monat, Tag der Woche, Befehl
     *
     * @param array $row
     * @return boolean
     */
    
public function add(array $row) {
        if(
count($row) != 6) {
            return 
false;
        }
        
$command array_pop($row);
        
$row array_map(array($this'_sanitize'), $row);
        
$row[] = $command;
        
$this->rows[] = $row;
        return 
true;
    }

    
/**
     * Speichert alle Cronjobs in die Crontab Datei des Users
     *
     * @return boolean 
     */
    
public function save() {
        
$file tempnam(sys_get_temp_dir(), 'PHP_CRONTAB');
        
$handle fopen($file'w');
        foreach(
$this->rows AS $row) {
            
fwrite($handleimplode(' '$row).PHP_EOL);
        }
        
fclose($handle);
        
exec("crontab $file");
        
unlink($file);
        
$tmp $this->rows;
        
$this->_parse();
        return (
$tmp === $this->rows);
    }
}

?>
draco88 ist offline   Mit Zitat antworten
Alt 01.12.2011, 15:18  
Neuer Benutzer
 
Registriert seit: 01.12.2011
Beiträge: 1
PHP-Kenntnisse:
Fortgeschritten
mccrossen befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
ich habe mich extra angemeldet, da ich einen kleinen Fehler entdeckt habe.

In der Funktion remove, so funktioniert es besser:

PHP-Code:
public function remove(array $spec) {
        if(isset(
$spec['row'])) {
                unset(
$this->rows[$spec['row']]);
                return 
true;
        }
        
$rows $this->find($spec);
        foreach(
$rows AS $i => $row) {
            unset(
$this->row[$i]);
        }
        return 
count($rows);
    } 
Erklärung:
Wenn man eine Zeile direkt löschen möchte, versucht das Skript die Variable $this->row[] zu löschen, dabei ist die globale Variable der Klasse $this->rows

Ansonsten ist das eine richtig geile Klasse.

Grüße

Marcel
mccrossen ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kleinen PHP Script "Bannerrotation" aus MySQL-Datenbank erstellen... ispvip PHP Tipps 2009 2 03.11.2009 09:01
PHP Ordner erstellen mit bestimmten Namen matzee PHP Tipps 2009 13 04.09.2009 11:45
[Erledigt] jpeg erstellen aus textstring erstellen Psydl PHP Tipps 2009 16 07.07.2009 18:54
[Erledigt] foreach schleife beim erstellen einer image_map schlägt fehl litterauspirna PHP Tipps 2009 8 25.05.2009 13:04
Cronjob? hallo1995 PHP Tipps 2009 6 11.05.2009 11:48
cronjob erstellen SteiniKeule PHP Tipps 2009 4 08.02.2009 13:54
php mail() versand über windows cronjob michygan PHP-Fortgeschrittene 6 06.12.2008 12:09
Cronjob: Falsche Ausführung - CPU schuld? Curanai Server, Hosting und Workstations 1 18.10.2007 19:11
php cronjob erstellt keine txt-datei... MrCavity Server, Hosting und Workstations 1 14.10.2006 15:57
[Erledigt] Per Cronjob Datei erstellen Server, Hosting und Workstations 5 01.05.2006 20:46
[Erledigt] Cronjob mit sehr kleinem Zeitintervall PHP-Fortgeschrittene 8 25.03.2006 23:05
darf keine Datenbank erstellen in phpMyAdmin Datenbanken 2 20.10.2005 19:32
Stammbaum erstellen Riot PHP Tipps 2005 17 13.05.2005 16:32
Ordner erstellen und Datei uploaden Juuro PHP Tipps 2005 6 20.01.2005 21:18
Ordner per Skript erstellen --> Rechte Problem PHP Tipps 2004 2 06.07.2004 14:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cronjob mit php, cronjob erstellen, http://www.php.de/php-fortgeschrittene/61843-erledigt-cronjob-per-php-erstellen.html, cronjob per php, cronjob mit php erstellen, cronjob per php erstellen, cronjob mit php steuern, php cronjob erstellen, cronjob erstellen php, cronjob php steuern, cronjobs mit php erstellen, php cronjob eintragen, cronjobs über php steuern, crontab per php ändern, crontab anlegen, cronjob php anlegen, cronjobs erstellen, php exec crontab, php cronjob anlegen, crontab steuern

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:20 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum