crontab zamanlayıcı bileşeni
Açıklama
workerman/crontab
, Linux'taki crontab'a benzer, fakat workerman/crontab
saniye seviyesinde 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)[atlayabilir, eğer 0'lık yoksa, en küçük zaman dilimi dakikadır]
Proje Adresi
https://github.com/walkor/crontab
Kurulum
composer require workerman/crontab
Kullanım
Adım 1: Yeni bir proses dosyası oluşturun app/process/Task.php
<?php
namespace app\process;
use Workerman\Crontab\Crontab;
class Task
{
public function onWorkerStart()
{
// Her saniye bir kez çalıştır
new Crontab('*/1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Her 5 saniye bir kez çalıştır
new Crontab('*/5 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Her dakika bir kez çalıştır
new Crontab('0 */1 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Her 5 dakika bir kez ç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";
});
// Her gün saat 7:50'de çalıştır, burada saniye kısmı atlanmıştır
new Crontab('50 7 * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
}
}
Adım 2: Proses dosyasını webman ile başlatmak için yapılandırın
Yapılandırma dosyası config/process.php
'yi açın ve aşağıdaki yapılandırmayı ekleyin
return [
....Diğer yapılandırmalar, burada atlanmıştır....
'task' => [
'handler' => app\process\Task::class
],
];
Adım 3: webman'ı yeniden başlatın
Not: Zamanlayıcı görevleri hemen çalışmayacak, tüm zamanlayıcı görevleri bir sonraki dakikadan itibaren saymaya başlayacaktır.
Açıklama
crontab asenkron değildir, örneğin bir task işleminde A ve B adlı iki zamanlayıcı ayarlandığında, her ikisi de her saniye bir görev çalıştırıyorsa fakat A görevi 10 saniye sürüyorsa, B, A'nın tamamlanmasını beklemek zorunda kalacak, bu da B'nin yürütülmesinde gecikmelere neden olacaktır. Eğer iş için zaman aralıkları çok hassassa, hassas zamanlayıcı görevlerini ayrı bir proses içinde çalıştırmak gerekir, diğer zamanlayıcı görevlerden etkilenmemesi için. Örneğin config/process.php
'de aşağıdaki yapılandırmayı yapabilirsiniz
return [
....Diğer yapılandırmalar, burada atlanmıştır....
'task1' => [
'handler' => process\Task1::class
],
'task2' => [
'handler' => process\Task2::class
],
];
Zaman duyarlı zamanlayıcı görevlerini process/Task1.php
dosyasına yerleştirin, diğer zamanlayıcı görevleri process/Task2.php
dosyasına yerleştirin.
Daha fazla config/process.php
yapılandırma açıklamaları için lütfen Özel Proses bölümüne bakınız.