Ankündigung

Einklappen
Keine Ankündigung bisher.

Cronjob erstellen

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cronjob erstellen

    Hallo
    ich habe ein problem und zwar will meine Website kein Cronjob erstellen
    Also in der Datei lasse ich diese Zeilen ausführen.
    PHP-Code:
    $crontab = new Crontab();
       
    $sexy ''.$dateTime['time'].' '.$dateTime['date'].' * /var/www/virtual/tld-domain.de/htdocs/sh/stopserver.sh '.$_POST['port'].'';
      
    $crontab->add(array($sexy)); 
    und die ganze funktion steht in der Datei cronjob.php die auch included ist.
    Diese Datei sieht so aus.
    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);
      }
    }
    ?>
    Und ja es funktioniert nicht Seite sagt ist alles ok gucke ich über putty cronjob -l dann steht da das keine cronjob gibs.
    Kann mir einer Helfen?
    MfG
    Slipknoter6

  • #2
    if(count($row) != 6) {
    return false;
    }

    Dort fliegt er schon aus der add() raus.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      okay
      aber wenn ich es ohne

      if(count($row) != 6) {
      return false;
      }

      mache funkt es auch nicht muss also mehr falsch sein

      -_-

      Kommentar


      • #4
        Die Funktion erwartet nunmal ein Array mit 6 einträgen, wenn du ihr dieses nicht lieferst wird auch der weitere Ablauf nichtmehr so hinhauen wie vorgesehen.
        [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

        Kommentar


        • #5
          Also so muss es sein für 6 arrays
          PHP-Code:
          $crontab->add(array($dateTime['min'] , $dateTime['std'] , $dateTime['days'] , $dateTime['month'] , "*" "/var/www/virtual/tld-domain.de/htdocs/sh/stopserver.sh ".$_POST['port'])); 
          Nur so funktoniert die seite nicht mehr. Also sie bleibt weiß

          $datetime habe ich abgeändert

          Kannst mir da vlt helfen?

          Kommentar


          • #6
            [MOD: Geschlossen]
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar

            Lädt...
            X