Ankündigung

Einklappen
Keine Ankündigung bisher.

Cronjob per PHP erstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • slipknoter6
    hat ein Thema erstellt Cronjob per PHP erstellen.

    Cronjob per PHP erstellen

    Hallo
    Ich will mir eine Hosting website machen.
    Nur habe ich da noch ein problem. Und zwar soll ja wenn die Server bzw ein Server auslauft soll er automatisch gestoppt werden.

    So da habe ich mir gedacht das geht mit Cronjob bzw ich habs gelesen.
    Ich habe da schon bischen probiert aber leider geht das bis jetzt nicht.

    Problem ist: Er erstellt erst keinen Cronjob

    Fehler: Weiß ich nicht deswegen frage ich

    Was habe ich bis jetzt?
    Cronjob.php eingefügt im header
    PHP-Code:
     <?php
    /**
     * @author Mark Wecke <mark.wecke@googlemail.com>
     */
    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);
            
            if(!empty(
    $rows))
            {        
              if(
    substr($rows[0], 010) == 'no crontab') {
                 return;
              }
              foreach(
    $rows AS $row) {
                  
    $this->rows[] = $this->_parseRow($row);
              }
            }
        }  

        
    /**
         * Splittet eine Zeile der Crontab in ein Array auf
         *
         * @param String $row
         * @return Array
         */
        
    protected function _parseRow($row) {
            return 
    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->rows[$spec['row']]);
                    return 
    true;
            }
            
    $rows $this->find($spec);
            foreach(
    $rows AS $i => $row) {
                unset(
    $this->rows[$i]);
            }
            return 
    count($rows);
        }

        
    /**
         * Benötigt eine Zeile der Crontab als String oder numerisches Array. <br />
         * Minute, Stunde, Tag im Monat, Monat, Tag der Woche, Befehl
         *
         * @param array|string $row
         * @return boolean
         */
        
    public function add($row) {
            if(
    is_string($row)) {
                
    $row $this->_parseRow($row);
                if(
    count($row) != 6) {
                    return 
    false;
                }
            } else if(
    is_array($row)) {
                if(
    count($row) != 6) {
                    return 
    false;
                }
                
    $command array_pop($row);
                
    $row array_map(array($this'_sanitize'), $row);
                
    $row[] = $command;
            } else {
                return 
    false;
            }
            
    $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 die Funktion:
    PHP-Code:
    $crontab = new Crontab();
    $sexy = array($dateTime['min'] , $dateTime['std'] , $dateTime['days'] , $dateTime['month'] , "*" "/var/www/virtual/tld-domain.de/htdocs/sh/stopserver.sh ".$_POST['port']);
        echo 
    $sexy[5];
        echo 
    "Count1:".count($sexy)."|";
        
    $crontab->add($sexy);
        
    $crontab->save();
      if(
    $crontab->add($sexy) == false)
      {
          echo 
    "FALSE-_-";
      }
      else if(
    $crontab->add($sexy) == true)
      {
          echo 
    "true1111";
      }
      
      
    $crontab = new Crontab();
          echo 
    "Wie viele Cronjobs?:".count($crontab->getAll()); 

    Was macht er bzw was gibt er aus?:

    Count1:6|true1111Wie viele Cronjobs?:0

    Also irgendwas mache ich falsch.


    Kann mir da einer weiterhelfen? Habe schon viel gegoogle und das ist bis jetzt das ergebniss.

  • nikosch
    antwortet
    Weil ich gerne ein eigendes haben möchte. Wo ich weiß wie es alles Funktioniert und ich gerne diese Sprache lernen möchte
    Ja, man sieht, dass Du unglaublich erfolgreich dabei bist.

    https://www.tutorials.de/threads/cro...tellen.399004/

    Der gleiche Code seit 2 1/2 Monaten und das einzig vernünftige daran hast Du Dir zusammengegooglet. Also erzähl doch nich so einen Mist.

    Einen Kommentar schreiben:


  • ChristianK
    antwortet
    Zitat von slipknoter6 Beitrag anzeigen
    Nein Ich kann den Kunden beliebig viele Server geben. Und mit Server meine ich GameServer(CSS CS:GO) oder VoiceServer(TS)
    Das hindert dich immer noch nicht daran, die Umgebungen zu virtualisieren. Damit kannst du auch eine Lastverteilung erreichen, weil wohl kaum 1 TS-Server einen üblichen Dedicated Server (~3 GHz, 16 GB RAM) überlastet...

    Einen Kommentar schreiben:


  • slipknoter6
    antwortet
    Weil ich gerne ein eigendes haben möchte. Wo ich weiß wie es alles Funktioniert und ich gerne diese Sprache lernen möchte

    Einen Kommentar schreiben:


  • monolith
    antwortet
    Und warum nichts vorgefertigstes wie https://easy-wi.com/de/gameserver-webinterface/ ?

    Einen Kommentar schreiben:


  • slipknoter6
    antwortet
    Nein Ich kann den Kunden beliebig viele Server geben. Und mit Server meine ich GameServer(CSS CS:GO) oder VoiceServer(TS)

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Frage ist unverständlich und wenig fortschrittlich.

    Einen Kommentar schreiben:


  • ChristianK
    antwortet
    Cronjob per PHP erstellen

    Also hast du pro Server ein Kunde? Ich hoffe, Server ist hier gleichbedeutend mit Virtualisierung.

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    moma: Er meint damit, wenn der Vertrag mit dem Kunden ausläuft soll automatisch der Server der zu diesem Vertrag gehört heruntergefahren werden.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von slipknoter6 Beitrag anzeigen
    @Moma
    Wenn der Server nur noch 2min Lauft soll er in 2Minuten automatisch ausgehen heißt heruntergefahren werden.
    wenn er nur noch 2 minuten läuft, ist er nach 2 min aus, eo ipso.

    btw. möglicherqweise suchste sowas ?

    http://linux.die.net/man/8/watchdog

    //OT: was ist an dem thema eigentlich forgeschritten?

    Einen Kommentar schreiben:


  • slipknoter6
    antwortet
    Error-Reporting habe ich schon auf E_ALL und dort kommen keine errors. Mit dem Debugausgaben soll ich die auch in die Cronjob.php machen? Habe ja schon prakrtisch die Funktion mit Echo gedebugt und geguckt wo es hin geht

    Sry fals es grade bischen dumm vorkommt aber grade echt verzweifelt


    @Moma

    Wenn der Server nur noch 2min Lauft soll er in 2Minuten automatisch ausgehen heißt heruntergefahren werden.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Und zwar soll ja wenn die Server bzw ein Server auslauft soll er automatisch gestoppt werden.
    was auch immer das ist, ich befürchte cron ist nicht schnell genug, um dein server in kritischen situationen zu stoppen.

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    Zitat von slipknoter6 Beitrag anzeigen
    Hallo
    Ich will mir eine Hosting website machen.
    Nur habe ich da noch ein problem. Und zwar soll ja wenn die Server bzw ein Server auslauft soll er automatisch gestoppt werden.

    So da habe ich mir gedacht das geht mit Cronjob bzw ich habs gelesen.
    Ich habe da schon bischen probiert aber leider geht das bis jetzt nicht.
    Ich habe Angst.

    Zu deinem Problem: Geht nicht ist keine Fehlerbeschreibung. Schalte Error-Reporting ein und auf volle Stufe, mache Debugausgaben und finde heraus, in welcher If-Verzweigung er landet und was genau passiert und vorallem welcher Codeabschnitt eben nicht das tut was er soll.

    Einen Kommentar schreiben:

Lädt...
X