KKUT Docs

Crontab Kütüphanesi

Crontab kütüphanesi LINUX işletim sistemlerinde zamanlanmış görevleri yönetmek için oluşturulmuş kütüphanedir. Bu kütüphane sayesinde belirlenen zamanlarda belirlenen işlerin yaptırılmasını …

Crontab kütüphanesi LINUX işletim sistemlerinde zamanlanmış görevleri yönetmek için oluşturulmuş kütüphanedir. Bu kütüphane sayesinde belirlenen zamanlarda belirlenen işlerin yaptırılmasını sağlayabilirsiniz. 

Gereksinimler

1 - İşletim sisteminin Linux olması gerekmektedir.
2 - Crontab'ın işletim sisteminde kurulu olması gerekmektedir.

Kurulum

Bu bileşen KUT ile birlikte gelir; ayrıca kurulum gerektirmez.

↓ Paket KUT ile birlikte gelir.

Yapılandırma

Aşağıda crontab ayarlarını yapılandırmak için kullanılan dizi gösterilmiştir.

Dosya: Config/Services.php
Processor
string $driver = 'exec' Komut çalıştırmak için kullanılan yöntemi belirtir.
Seçenekler exec, shell, system, ssh
string $path = '/usr/bin/php' Çalıştırılıcak PHP'nin yolunu ifade eder.

Yöntemler

Crontab::command(string $command) : int
Crontab::controller(string $controller) : int
Crontab::wget(string $url) : int
Crontab::script(string $command) : int
Crontab::stringQuery() : string
Crontab::list() : string
Crontab::listarray() : array
Crontab::remove(scalar $id) : bool
Crontab::limit(int $limit = [[1]]) : void
Crontab::queue(callable $callable, int $increment = [[1]]) : void
Crontab::path(string $path) : this
Crontab::interval(string $interval) : this

Zaman Yöntemleri

Aşağıdaki listede hangi zaman yöntemi ile hangi ayarlamaların yapılabileceği gösterilmiştir.

Yöntem Parametre Anlamı
hourly()   Her saatte bir.
daily()   Her günde bir.
midnight()   Her gecede bir.
monthly()   Her ayda bir.
weekly()   Her haftada bir.
yearly()   Her yılda bir.
clock() 12:30 00:48 20:00 Belirtilen saatte bir.
minute() 5 5-10 53,55,57 Belirtilen dakikalarda.
perminute() 30 Her belirtilen dakikada bir.
hour() 23 7-13 3,5,11 Belirtilen saatlerde.
perhour() 2 Her belirtilen saatte bir.
day() monday sunday saturday Belirtilen günlerde.
perday() friday Her belirtilen günlerde bir.
dayNumber() 30 10 15 Her ayın belirli gününde bir.

 

Zaman Formatı

+---------------- ->minute()
|  +------------- ->hour()
|  |  +---------- ->dayNumber()
|  |  |  +------- ->month()
|  |  |  |  +---- ->day()
|  |  |  |  |
*  *  *  *  *  [ ->path() ] [ ->controller() / command() ]

 

Konsol ile Kullanım KUT 1.0’da desteklenir

Linux sistemlerde terminal kullanarak zamanlanmış görevler oluşturabilirsiniz. Aşağıda bir kontrolcü ve bir command kütüphanesine yönelik kod çalıştırma örneği verilmiştir.

php buyruk cron:run home/sendmail minute /1
php buyruk cron:run ExampleCommand:sendMail daily
php buyruk cron:run http://example.site/example/page
php buyruk cron:list
php buyruk cron:delete 1

Command 

KUT Framework Commands/ dizini içinde yer alan yazdığınız özel komutları çalıştırmak için kullanılır. 

Parametreler

string $command Çalıştırılacak Sınıf ve metot bilgisi. 
return int

Kullanımı

Crontab::day('monday')->clock('10:30')->command('EmailCommand:send');
Crontab::daily()->command('EmailCommand:send');
6.46.3 Güncellemesi

Bu güncellemede komut dosyasına parametre gönderebilmek için opsiyonel yöntem olarak Crontab::parameters() yöntemi eklenmiştir.

Parametreler

array ...$parameters Gönderilecek parametreler.
return this

Kullanımı

Crontab::daily()->parameters('exampleFile')->command('File:delete');

Yukarıdaki örnekte içinde 'home' geçen görevler silinir. Zamanlanmış görevleri görmek için Crontab::list() yönteminden yararlanabilirsiniz.

Controller 

KUT Framework kontrolcülerini ve ona bağlı yöntemleri çalıştırılabilmek için kullanılır.

Parametreler

string $controller Çalıştırılacak Kontrolcü ve metot bilgisi. Bu parametreye controller/function formunda bilgi yazılır. Kontrolcü adı dosya adına göre yazılır.
return int

Kullanımı

Crontab::day('monday')->clock('10:30')->controller('Accounts/sendEmail');
Crontab::daily()->controller('Accounts/sendEmail');

Wget 

URL çalıştırmak için kullanılır.

Parametreler

string $url Çalıştırılacak URL bilgisi.
return int

Kullanımı

Crontab::day('monday')->clock('10:30')->wget('http://site.com/example/page');

 

# Script KUT 1.0’da desteklenir

Zaman damgasından itibaren herhangi bir kod çalıştırmak için kullanılır. Daha önceki yöntemlerin hepsi php çalıştırırken bu yöntem ile istediğiniz betiği çalıştırabilirsiniz.

Parametreler

string $command Çalıştırılacak komut bilgisi.
return int

Kullanımı

Crontab::day('monday')->clock('10:30')->script('/usr/bin/sh /home/lucky/myfile.sh');
30 10 * * 1 /usr/bin/sh /home/lucky/myfile.sh

# StringQuery KUT 1.0’da desteklenir

Oluşturulan cron komutunun string çıktısını almak için kullanılır.

Parametreler

return string

Kullanımı

Crontab::day('monday')->clock('10:30')->script('/usr/bin/sh /home/lucky/myfile.sh');

output(Crontab::stringQuery());
30 10 * * 1 /usr/bin/sh /home/lucky/myfile.sh

Path 

Crontab için çalıştırılacak olan PHP'nin yoludur. Ön tanımlı: /usr/bin/php

Parametreler

string $path PHP Yolu.
return this

Kullanımı

Crontab::month(1)
       ->day(1)
       ->clock('12:30')
       ->path('/opt/lampp/bin/php')
       ->controller('home/test');

List 

Zamanlanmış görevlerin listesini verir.

Parametreler

return string

Kullanımı

echo Crontab::list();

Listarray 

Zamanlanmış görevlerin listesini dizi türünden verir.

Parametreler

return array

Kullanımı

echo Crontab::listarray();

Remove 

Zamanlanmış görevi silmek için kullanılır.

Parametreler

scalar $id = NULL Crontab::list() yöntemi ile listelenen cron işlerin başındaki id değerine göre silme işlemi yapabilirsiniz.

Kullanımı

Crontab::remove(1);

Tüm zamanlanmış görevleri silmek için;

Crontab::remove();
PaketKUT 1.0’da desteklenir Güncellemesi

Bu güncelleme ile bu yöntemin parametresi string türden veri kabul etmektedir. Parametre olarak yazılan ifadenin içinde geçtiği zamanlanmış görevler silinir.

Crontab::remove('home');

Yukarıdaki örnekte içinde 'home' geçen görevler silinir. Zamanlanmış görevleri görmek için Crontab::list() yönteminden yararlanabilirsiniz.

Limit KUT 1.0’da desteklenir

Zamanlanmış görevin kaç kez çalışacağını belirlemek için kullanılır. Bu yöntem komut dosyası içerisinde kullanılır.

PaketKUT 1.0’da desteklenir Güncellemesi

Bu güncellemede 1. parametre olan int $id parametresi kaldırılmıştır. Artık bu yöntem çalıştığı komut sınıfını otomatik olarak algılıyor.

Parametreler

int $limit = 1 Komutun kaç kez çalıştırılacağı.

Kullanımı

Komut Dosyası: Commands/CreateFileCommand.php
 namespace Project\Commands;

use File, Crontab;

class CreateFileCommand extends Command
{
    public function do()
    {
        File::create(md5(rand()));

        Crontab::limit(2);
    }
}

Aşağıda yukarıdaki komut dosyasını 1 günde bir çalıştıracak konsol komutu yer almaktadır.

php buyruk cron:run CreateFileCommand:do perday 1

Komut 2 kez çalıştıktan sonra zamanlanmış görev sonlandılır.

Queue 

Zamanlanmış görevin belli koşullara göre çalışmaya devam edeceğini veya sonlanacağını belirlemek için kullanılır. Bu yöntem komut dosyası içerisinde kullanılır. Özellikle toplu mail gönderimleri için oldukça kullanışlıdır.

PaketKUT 1.0’da desteklenir Güncellemesi

Bu güncellemede 1. parametre olan int $id parametresi kaldırılmıştır. Artık bu yöntem çalıştığı komut sınıfını otomatik olarak algılıyor.

Parametreler

callable $callable Çalıştırılacak fonksiyon. 2 tane parametresi vardır. $queIndex ve $increment QueueIndex 0'dan başlar ve artış miktarına bağlı olarak kuyruğun kaldığı son indeksi döndürür.
int $increment = 1 
Artışın kaçar kaçar olacağı.

Kullanımı

Komut Dosyası: Commands/Example.php
 namespace Project\Commands;

use File, Crontab;

class Example extends Command
{
    public function do()
    {
        Crontab::queue(function($queueIndex, $increment)
        {
            File::create($queueIndex);
            
            if( $queueIndex === 2 )
            {
                return false;
            }
        });
    }
}

Aşağıda yukarıdaki komut dosyasını 1 dakikada bir çalıştıracak konsol komutu yer almaktadır.

php buyruk cron:run Example:do perminute 1

Komut çalıştırıldıktan sonra 0, 1 ve 2 isimli 3 adet dosya oluşturacak ve görev tamamlanacaktır.

Son Değeri Yakalama

Kuyruğun kaldığı son değer. 2. parametreye yazılan function($queIndex){...} fonskiyonunun 1. parametresine atanacak değişken ile yakalanır.

Artış Miktarını Yakalama

Queue() yöntemine yazılan 3. parametreyi yakalamak için 2. parametreye yazılan function($queIndex, $increment){...} fonksiyonunun 2. parametresine atanacak değişken ile yakalanır.

Görevi Sonlandırma

Görevi sonlandırmak için fonksiyonun false ile return edilmesi gerekmektedir.

E-posta Gönderim Örneği

Aşağıda basit bir şekilde toplu e-posta gönderim örneği verilmiştir.

Komut Dosyası: Commands/SendEmailAllCommand.php
 namespace Project\Commands;

use Email, DB, Crontab;

class SendEmailAllCommand extends Command
{
    public function do()
    {
        Crontab::queue(function($queueIndex, $increment)
        {
            $result = DB::limit($queueIndex, $increment)->accountsResult();

            foreach( $result as $row )
            {
                Email::bcc($row->email, $row->name);
            }
           
            return Email::from('SiteCom')->send('Subject', 'Message');
        }, 35);
    }
}

Aşağıda yukarıdaki komut dosyasını 1 dakikada bir çalıştıracak konsol komutu yer almaktadır.

php buyruk cron:run SendEmailAllCommand:do perminute 1

Artık komut dosyamız her dakikada bir 35 adet e-posta adresine sırası ile toplu mail gönderir. Email::send() yöntemi false dönene kadar e-posta gönderimlerine devam eder. Hatalı e-posta ihtimallerine karşılık komutun sonraki e-postalar için devam etmesi istenirse $result değişkenide return (bool) count($result); şeklinde döndürülebilir.

KUT Framework 1.0Katmanlı Uygulama Tabanı

Kur. Uyarla. Türet.