Crontab Kütüphanesi


    × Bunları biliyor muydunuz?
"ZN Framework düzenlenebilir dizin yapısı ile kendi kod çatınızı oluşturmanıza imkan veren dünyadaki tek kod çatısıdır."


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


ZN SE ve ZN CE dağıtımları için terminal kurulum komutu.

↓ composer require znframework/package-crontab

 

 

# 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


This command(String $command)
This controller(String $controller)
This wget(String $url)
String list(Void)
Bool remove(Scalar $id)
Void limit(Int $id, Int $limit = 1)
Void queue(Int $id, Callable $callable, Int $decrement = 1)
This path(String $path)
This interval(String $interval)

 

 

# 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() Void Her saatte bir.
daily() Void Her günde bir.
midnight() Void Her gecede bir.
monthly() Void Her ayda bir.
weekly() Void Her haftada bir.
yearly() Void 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 7-1311 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 (ZN >= 5.1.0)


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 zerocore run-cron home/sendmail minute /1
php zerocore run-cron ExampleCommand:sendMail daily
php zerocore run-cron http://example.site/example/page
php zerocore cron-list
php zerocore remove-cron 1

 

 

# Command (ZN >= 5.1.0)


ZN 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 Mixed

Kullanımı

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

 

 

# Controller (ZN >= 5.1.0)


ZN 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 Mixed

Kullanımı

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

 

 

# Wget (ZN >= 5.1.0)


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

Parametreler

String $url Çalıştırılacak URL bilgisi.
Return Mixed

Kullanımı

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

 

 

# Path (ZN >= 3 1.0)


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 (ZN >= 5.1.0)


Zamanlanmış görevlerin listesini verir.

Parametreler

Void
Return String

Kullanımı

echo Crontab::list();

 

 

# Remove (ZN >= 5.1.0)


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.
Return Void

Kullanımı

Crontab::remove(1);

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

Crontab::remove();

 

 

# Limit (ZN >= 5.3.6)


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

Parametreler

Scalar $id = NULL Cron ID. Hangi ID'li görevin limitleneceği.
Int $limit = 1 Komutun kaç kez çalıştırılacağı.
Return Void

Kullanımı

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

use File, Crontab;

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

        Crontab::limit(1, 2);
    }
}

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

php zerocore run-cron CreateFileCommand:do perday 1

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

 

 

# Queue (ZN >= 5.3.6)


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.

Parametreler

Scalar $id = NULL Cron ID. Hangi ID'li görevin limitleneceği.
Callable $callable Çalıştırılacak fonksiyon. 2 tane parametresi vardır. $queIndex ve $decrement QueueIndex 0'dan başlar ve artış miktarına bağlı olarak kuyruğun kaldığı son indeksi döndürür.
Int $decrement = Artışın kaçar kaçar olacağı.
Return Void

Kullanımı

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

use File, Crontab;

class Example extends Command
{
    public function do()
    {
        Crontab::queue(1, function($queueIndex, $decrement)
        {
            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 zerocore run-cron 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, $decrement){...} 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
<?php namespace Project\Commands;

use Email, DB, Crontab;

class SendEmailAllCommand extends Command
{
    public function do()
    {
        Crontab::queue(1, function($queueIndex, $decrement)
        {
            $result = DB::limit($queueIndex, $decrement)->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 zerocore run-cron 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.