crontab zamanlanmış görev bileşeni
workerman/crontab
Açıklama
workerman/crontab
, linux'un crontab'ına benzer, ancak workerman/crontab
saniyelik zamanlamayı destekler.
Zaman açıklaması:
0 1 2 3 4 5
| | | | | |
| | | | | +------ haftanın günü (0 - 6) (Pazar=0)
| | | | +------ ay (1 - 12)
| | | +-------- ayın günü (1 - 31)
| | +---------- saat (0 - 23)
| +------------ dakika (0 - 59)
+-------------- saniye (0-59)[isteğe bağlı, 0 pozisyonu olmadığında, minimum zaman bir dakikadır]
Proje bağlantısı
https://github.com/walkor/crontab
Kurulum
composer require workerman/crontab
Kullanım
Adım 1: process/Task.php
adlı yeni bir işlem dosyası oluşturun
<?php
namespace process;
use Workerman\Crontab\Crontab;
class Task
{
public function onWorkerStart()
{
// Her saniyede bir çalıştır
new Crontab('*/1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Her 5 saniyede bir çalıştır
new Crontab('*/5 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Her dakikada bir çalıştır
new Crontab('0 */1 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Her 5 dakikada bir çalıştır
new Crontab('0 */5 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Her dakikanın ilk saniyesinde çalıştır
new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Günde bir kez saat 7:50'de çalıştır, burada saniye pozisyonu atlandı
new Crontab('50 7 * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
}
}
Adım 2: İşlem dosyasını webman'in başlatılmasıyla yapılandırın
config/process.php
dosyasını açın ve aşağıdaki yapılandırmayı ekleyin
return [
....diğer yapılandırmalar burada atlanmıştır....
'task' => [
'handler' => process\Task::class
],
];
Adım 3: Webman'i yeniden başlatın
Not: Zamanlanmış görevler hemen çalıştırılmaz, tüm zamanlanmış görevler bir sonraki dakikada başlayacak şekilde zamanlanır
Açıklama
crontab asenkron değildir, örneğin, bir işlem dosyasında A ve B olmak üzere iki zamanlayıcı ayarlanmış olsun, her ikisi de her saniye bir kez görevi çalıştırır, ancak A görevi 10 saniye sürerse, B'nin çalıştırılması için A'nın tamamlanmasını beklemesi gerekir, bu da B'nin gecikmeli olarak çalışmasına neden olur.
Zaman aralığı iş için hassas ise, hassas zamanlanmış görevi ayrı bir işlemde çalıştırmak için diğer zamanlanmış görevlerden etkilenmesini önlemek önemlidir. Örneğin, aşağıdaki gibi config/process.php
dosyasına yapılandırma yapın
return [
....diğer yapılandırmalar burada atlanmıştır....
'task1' => [
'handler' => process\Task1::class
],
'task2' => [
'handler' => process\Task2::class
],
];
Zaman hassasiyeti gerektiren zamanlanmış görevleri process/Task1.php
dosyasına, diğer zamanlanmış görevleri process/Task2.php
dosyasına yerleştirin.
Daha fazlası
Daha fazla config/process.php
yapılandırma açıklaması için, Özel İşlem bağlantısına bakın