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.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    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.
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        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]
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar

            Lädt...
            X