crontab Zeitplanungs-Component
Beschreibung
workerman/crontab
ähnelt dem linux crontab, jedoch unterstützt workerman/crontab
die zeitliche Planung auf Sekundenbasis.
Zeitbeschreibung:
0 1 2 3 4 5
| | | | | |
| | | | | +------ Wochentag (0 - 6) (Sonntag=0)
| | | | +------ Monat (1 - 12)
| | | +-------- Tag des Monats (1 - 31)
| | +---------- Stunde (0 - 23)
| +------------ Minute (0 - 59)
+-------------- Sekunde (0-59)[kann weggelassen werden, wenn die 0. Stelle nicht vorhanden ist, dann ist die kleinste Zeiteinheit die Minute]
Projektadresse
https://github.com/walkor/crontab
Installation
composer require workerman/crontab
Verwendung
Schritt Eins: Erstellen Sie die Prozessdatei app/process/Task.php
<?php
namespace app\process;
use Workerman\Crontab\Crontab;
class Task
{
public function onWorkerStart()
{
// Alle eine Sekunde ausführen
new Crontab('*/1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Alle 5 Sekunden ausführen
new Crontab('*/5 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Alle Minute ausführen
new Crontab('0 */1 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Alle 5 Minuten ausführen
new Crontab('0 */5 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// In der ersten Sekunde jeder Minute ausführen
new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Jeden Tag um 7:50 Uhr ausführen, beachten Sie, dass hier die Sekundenstelle weggelassen wurde
new Crontab('50 7 * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
}
}
Schritt Zwei: Konfigurieren Sie die Prozessdatei zum Starten mit Webman
Öffnen Sie die Konfigurationsdatei config/process.php
und fügen Sie die folgende Konfiguration hinzu.
return [
....andere Konfigurationen, hier weggelassen....
'task' => [
'handler' => app\process\Task::class
],
];
Schritt Drei: Webman neu starten
Hinweis: Die zeitgesteuerten Aufgaben werden nicht sofort ausgeführt, alle zeitgesteuerten Aufgaben beginnen mit dem Timing erst in der nächsten Minute.
Hinweis
crontab ist nicht asynchron, zum Beispiel wenn in einem task Prozess sowohl A als auch B zwei Timer gesetzt wurden, die beide einmal pro Sekunde Aufgaben ausführen, jedoch A 10 Sekunden in Anspruch nimmt, muss B warten, bis A abgeschlossen ist, was zu einer Verzögerung bei der Ausführung von B führt. Wenn das Geschäft für Zeitintervalle sehr empfindlich ist, sollten zeitkritische Aufgaben in einem separaten Prozess ausgeführt werden, um zu verhindern, dass sie von anderen Aufgaben beeinflusst werden. Zum Beispiel sollte config/process.php
wie folgt konfiguriert werden:
return [
....andere Konfigurationen, hier weggelassen....
'task1' => [
'handler' => process\Task1::class
],
'task2' => [
'handler' => process\Task2::class
],
];
Platziere die zeitkritischen Aufgaben in process/Task1.php
und andere zeitgesteuerte Aufgaben in process/Task2.php
.
Für mehr Informationen zur Konfiguration von config/process.php
, siehe benutzerdefinierte Prozesse