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
Und die Funktion:
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.
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], 0, 10) == '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], 0, strlen($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($handle, implode(' ', $row).PHP_EOL);
}
fclose($handle);
exec("crontab $file");
unlink($file);
$tmp = $this->rows;
$this->_parse();
return ($tmp === $this->rows);
}
}
?>
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.
Kommentar