deutsch Verwenden Sie PHP zum Erstellen, Bearbeiten und Löschen von Crontab-Jobs?



crontab generator deutsch (10)

Überprüfe einen Cronjob

function cronjob_exists($command){

    $cronjob_exists=false;

    exec('crontab -l', $crontab);


    if(isset($crontab)&&is_array($crontab)){

        $crontab = array_flip($crontab);

        if(isset($crontab[$command])){

            $cronjob_exists=true;

        }

    }
    return $cronjob_exists;
}

Füge einen Cronjob an

function append_cronjob($command){

    if(is_string($command)&&!empty($command)&&cronjob_exists($command)===FALSE){

        //add job to crontab
        exec('echo -e "`crontab -l`\n'.$command.'" | crontab -', $output);


    }

    return $output;
}

Entferne eine Crontab

exec('crontab -r', $crontab);

Beispiel

exec('crontab -r', $crontab);

append_cronjob('* * * * * curl -s http://localhost/cron/test1.php');

append_cronjob('* * * * * curl -s http://localhost/cron/test2.php');

append_cronjob('* * * * * curl -s http://localhost/cron/test3.php');

Ist es möglich mit PHP Crontab-Jobs zu erstellen, zu bearbeiten und zu löschen?

Ich kann die aktuellen Crontab-Jobs des Apache-Benutzers auflisten:

$output = shell_exec('crontab -l');
echo $output;

Aber wie fügt man einen Cron Job mit PHP hinzu? 'crontab -e' würde einfach einen Texteditor öffnen und Sie müssen die Einträge manuell bearbeiten, bevor Sie die Datei speichern.

Und wie lösche ich einen Cron Job mit PHP? Wieder müssen Sie das manuell mit "crontab -e" tun.

Mit einem Job-String wie folgt:

$job = '0 */2 * * * /usr/bin/php5 /home/user1/work.php';

Wie füge ich es mit PHP zur Crontab-Jobliste hinzu?


Answer #1

Der einfachste Weg besteht darin, mit dem Befehl shell_exec ein bash-Skript auszuführen und die Werte als Parameter zu übergeben. Von dort aus können Sie Crontabs wie in jedem anderen nicht interaktiven Skript bearbeiten und sicherstellen, dass Sie über die richtigen Berechtigungen verfügen, indem Sie sudo usw. verwenden.

Sehen Sie dies, Crontab ohne crontab -e , für weitere Informationen.


Answer #2

Sie könnten versuchen, die EDITOR Umgebungsvariable mit etwas wie ed überschreiben, das eine Sequenz von Editierbefehlen über die Standardeingabe nehmen kann.


Answer #3

Es ist einfach, Sie können curl, um dies zu tun, stellen Sie sicher, Curl auf dem Server installiert:

zum Auslösen jeder Minute: * * * * * curl --request POST ' https://glassdoor.com/admin/sendBdayNotification '

        • *

    Minute Stunde Tag Monat Woche

Nehmen wir an, Sie möchten diese Benachrichtigung täglich um 14:15 Uhr senden. Sie können POST / GET basierend auf Ihrer API ändern:

15 14 * * * curl --request POST 'URL Ihrer API'


Answer #4

Ich habe die Lösung unten versucht

class Crontab {

// In this class, array instead of string would be the standard input / output format.

// Legacy way to add a job:
// $output = shell_exec('(crontab -l; echo "'.$job.'") | crontab -');

static private function stringToArray($jobs = '') {
    $array = explode("\r\n", trim($jobs)); // trim() gets rid of the last \r\n
    foreach ($array as $key => $item) {
        if ($item == '') {
            unset($array[$key]);
        }
    }
    return $array;
}

static private function arrayToString($jobs = array()) {
    $string = implode("\r\n", $jobs);
    return $string;
}

static public function getJobs() {
    $output = shell_exec('crontab -l');
    return self::stringToArray($output);
}

static public function saveJobs($jobs = array()) {
    $output = shell_exec('echo "'.self::arrayToString($jobs).'" | crontab -');
    return $output; 
}

static public function doesJobExist($job = '') {
    $jobs = self::getJobs();
    if (in_array($job, $jobs)) {
        return true;
    } else {
        return false;
    }
}

static public function addJob($job = '') {
    if (self::doesJobExist($job)) {
        return false;
    } else {
        $jobs = self::getJobs();
        $jobs[] = $job;
        return self::saveJobs($jobs);
    }
}

static public function removeJob($job = '') {
    if (self::doesJobExist($job)) {
        $jobs = self::getJobs();
        unset($jobs[array_search($job, $jobs)]);
        return self::saveJobs($jobs);
    } else {
        return false;
    }
}

}

Credits zu: Crontab Class zum Hinzufügen, Bearbeiten und Entfernen von Cron Jobs


Answer #5

Crontab-Befehlsverwendung

usage:  crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)

Damit,

$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');

Obiges kann sowohl zum Erstellen als auch zum Bearbeiten / Anhängen verwendet werden, vorausgesetzt, der Benutzer verfügt über die entsprechende Dateischreibberechtigung.

Um Jobs zu löschen:

echo exec('crontab -r');

Beachten Sie auch, dass Apache als ein bestimmter Benutzer ausgeführt wird, der normalerweise nicht root ist, was bedeutet, dass die Cron-Jobs nur für den Apache-Benutzer geändert werden können, sofern dem Apache-Benutzer nicht die Berechtigung crontab -u erteilt wird.


Answer #6

Sie können Ihre Datei in /etc/cron.d/ im Cron-Format ablegen. Fügen Sie dem filenaname ein eindeutiges Präfix hinzu Um scriptspezifische Cron-Jobs aufzulisten, arbeiten Sie einfach mit einer Liste von Dateien mit einem eindeutigen Präfix. Löschen Sie die Datei, wenn Sie den Job deaktivieren möchten.


Answer #7

Hängt davon ab, wo Sie Ihre Crontab speichern:

shell_exec('echo "'. $job .'" >> crontab');

Answer #8

Wir haben kürzlich ein Mini-Projekt (PHP> = 5.3) vorbereitet, um die Cron-Dateien für private und individuelle Aufgaben zu verwalten. Dieses Tool verbindet und verwaltet die Cron-Dateien, so dass Sie sie beispielsweise pro Projekt verwenden können. Unit Tests verfügbar :-)

Beispiel von der Befehlszeile:

bin/cronman --enable /var/www/myproject/.cronfile --user www-data

Beispiel von API:

use php\manager\crontab\CrontabManager;

$crontab = new CrontabManager();
$crontab->enableOrUpdate('/tmp/my/crontab.txt');
$crontab->save();

Verwalten einzelner Aufgaben über die API:

use php\manager\crontab\CrontabManager;

$crontab = new CrontabManager();
$job = $crontab->newJob();
$job->on('* * * * *');
$job->onMinute('20-30')->doJob("echo foo");
$crontab->add($job);
$job->onMinute('35-40')->doJob("echo bar");
$crontab->add($job);
$crontab->save();

GitHub: php-crontab-manager


Answer #9

Anstelle von crontab können Sie auch die App-Engine- Aufgabenwarteschlange von Google verwenden. Es hat eine großzügige freie Quote, ist schnell, skalierbar, modifizierbar.





crontab