Üye İşlemleri Alışveriş Sepeti
+90 (216) 99 000 99 Kampanyalar Biz Kimiz?
Reklamını Bildir
Alan Adı Hosting Sunucu Marka Web Tasarım SSL SSS Belgeler BTS Forum
Anasayfa » Yardım » Zamanlanmış Görev (Cronjobs) Nedir? Nasıl Kullanılır?

Zamanlanmış Görev (Cronjobs) Nedir? Nasıl Kullanılır?





Zamanlanmış Görev (Cronjob) Nedir?
Zamanlanmış görev, belirli bir işi belirli bir zamanda veya zamanlarda yapmamızı sağlayan komutlar bütünüdür. Zamanlanmış Görev ismi Linux sunucularından gelmektedir. Windowsta ise Görev Zamanlayıcı şeklinde bulabilirsiniz. Zamanlanmış görevler, belirli aralıklarla yapmamız gereken işlemleri bize otomatik olarak yapar. Örneğin; belirli zaman aralıklarında cache klasörünüzün içinin temizlenmesini istiyorsanız veya hem dosya hem de mysql yedeği almak istiyorsanız, zamanlanmış görevler tam size göre.

Nasıl Kullanılır?
Nasıl kullanılır sorusunun aslında birden fazla cevabı var. Ancak hepsindeki temel mantık aynı. Ben komut satırı (veya SSH) üzerinden yapılanlara girmeyeceğim. Aslında bu konuyu açamamdaki en büyük etmenlerden bir tanesi zamanlanmış görev ile uzak bir web sitesini çağırmaktı. Her neyse oraya sonra geleceğiz. Ben sizlere sadece web kontrol panelleri (örn. cpanel) üzerinde bu işlemleri nasıl yapacağımızı, hangi komutun ne işe yaradığını anlatacağım.

Önce Zamanlama
Zamanlanmış görevlerden ilk başlık “Zaman Ayarları”dır. Son sürüm Cpanel üzerinde bu ayarlar açılır kutu ile kolayca seçilebilir şekilde verilse de, mantığını bilmekte büyük fayda var. Zamanlanmış görevlerle birlikte kullanılabilecek 5 farklı zaman dilimi mevcut. Bunlar sırasıya “Dakika”, “Saat”, “Ayın Günü”, “Ay” ve “Haftanın Günü” şeklindedir. Bunları kısaca açıklayacak olursak;

Dakika

0 ile 59 arasında bir değer alabilir. Ayrıca * / – ve , işaretleri de belirli şartlar sağlandığında kullanılabilir.

Saat

0 ile 23 arasında bir değer alabilir. Yine * / – ve , işaretleri de belirli şartlar sağlandığında kullanılabilir.

Ayın Günü

1 ile 31 arasında bir değer alabilir. Yine * / – ve , işaretleri de belirli şartlar sağlandığında kullanılabilir.

Ay

1 ile 12 arasında bir değer alabilir. Yine * / – ve , işaretleri de belirli şartlar sağlandığında kullanılabilir.

Haftanın Günü

0 ile 6 arasında bir değer alabilir. Yine * / – ve , işaretleri de belirli şartlar sağlandığında kullanılabilir. 0 Pazar gününü, 6 ise Cumartesi gününü ifade eder.

* işareti her anlamındadır. Yani dakika için * işaretini kullanmak, her dakikada demektir.

/ işareti “da bir” anlamındadır.  Mesela; saat için konuşacak olursak, */2 her iki saatte bir demektir.

- işareti “x ten y ye kadar” gibi bir anlam çıkartır. Mesela haftanın günü için 1-5 Pazartesiden Cumaya kadar demektir.

, işareti ise tek ayrımlarda kullanılır. Mesela ayın günleri için 1,5,15,27 demek, belirtilen ayın 1. 5. 15. ve 27. günleri çalışacak demektir.

Yine zamanlar belirtilirken, sırasıyla “dakika, saat, ayın günü, ay ve haftanın günü” sıralaması kullanılır.

Komutlar
Zamanlanmış görevlerde “linux” sistemlerde linux komutları, windows sistemlerde windows komutları kullanılır. Örneğin linux bir sistemde herhangi bir klasörün içerisindeki dosyaları silmek için şöyle bir komut kullanabiliriz:

rm /home/kullaniciadi/tmp/*

Tüm alt klasörler dahir herşeyi silmek için ise;

rm -vrf /home/kullaniciadi/tmp/*

komutunu kullanabilirsiniz.

Şimdi asıl zurnanın zırt dediği noktaya gelelim. Benim bu yazıyı yazmamdaki amaca gelelim. Diyelim ki, sunucunuz üzerindeki bir PHP dosyasını çalıştırmak istiyorsunuz. Kullanacağınız komut:

php /home/kullaniciadi/public_html/dosyadi.php
veya;
/usr/bin/php /home/kullaniciadi/public_html/dosyadi.php

komutlarını kullanabiliyoruz. php veya /usr/bin/php komutundan sonra -q komutunu kullanırsak, geriye herhangi bir dönüş istemediğimizi belirtiyoruz. Yine bu komutları kullanırken çalıştırmak istediğimiz dosyaya herhangi bir parametre göndermek istersek $argv globalini kullanmamız gerekecektir. Şöyle ki;

php /home/kullaniciadi/public_html/dosyadi.php deger1 deger2 deger3

şeklinde parametreler gönderilebilir. Gönderdiğimiz bu parametreleri okuyabilmek için dosyadi.php içerisinde $argv globalini kullanmamız gerekecektir. Detaylı bilgi için php.net’in sitesine bakabilirsiniz.

Bu işin daha kolayı da var. Onlardan birtanesi de wget yani dosya çekme metodu. Dos ortamında çalışan programlar veya linux üzerinde komut satırında bir program kuracağınız zaman genellikle dosyaları indirmek için wget metodunu kullanırız. Bundan yola çıkarak wget yöntemiyle istediğimiz dosyayı çalıştırabiliriz. Örneğin yine dosyadi.php dosyamızı çalıştıracak olursak;

wget http://sitemizinadi.com/dosyadi.php

şeklinde kullanabiliriz. Bu yöntemde query string kullananlar bazen sıkıntı yaşadıklarını belirtiyorlar ancak ben herhangi bir sorunla karşılaşmadım bugüne kadar. Ancak wget yönteminde karşılaştığım tek şey, bunun bir dosya indirme yönetmi olmasından dolayı zamanlanmış görevi çalıştırdıktan sonra sistemin size gönderdiği raporda dosyanın çalışması sonucu ürettiği şeyleri size düzgün loglamaması. Yani sistem size şunu diyor; “ben dosyadi.php dosyasını başarıyla çalıştırdım ve bana ne verdiyle onu indirdim. Ama indirdiğim dosyanın içinde ne yazıyor onu sana söyleyemem. Sen onu bir yere kaydetmişsen git oradan oku.” Böyle olunca da ister istemez  wgetten soğuyorsunuz, çünkü siz cron ile çalıştırdığınız dosyada bazı kontroller yapıyorsunuz ve bunun sonucuna göre belirli bilgileri almak istiyorsunuz. İşte wget yönteminde bu bilgileri alamıyorsunuz.

Gelelim işin en kolayına; GET methodu. Tanıdık geldi değil mi? Evet çok basit bir şekilde zamanlanmış görev için

GET http://sitemizinadi.com/dosyadi.php?adi=yoncu&soyadi=bilisim

şeklinde çalışabiliyorsunuz. Ve normal tarayıcı ekranında bu sayfa çalıştıktan sonra size ne gösteriyorsa, aynısını cron üzerinde de yapıyor. Ancak orada göstermek yerine size sayfanın çıktısını mailliyor veya belirteceğiniz log dosyasına kaydediyor. Gördüğünüz gibi yukarıda saatlerce anlatmaya çalıştıklarımı burada hop diye yapıverdik.

Geri Bildirim
Zamanlanmış görevler ile gerçekleştirilen her işlem için bir sonuç üretilir. Bu sonuç varsayılan olarak sunucuda kayıtlı olan mail adresine gönderilir. Cpanel üzerinde bu mail adresini değiştirebilirsiniz. Diğer panellerde de mutlaka mevcuttur. Ayrıca isterseniz bu sonuçları mail olarak almak yerine tamamen iptal edebilir veya bir dosyada da saklayabilirsiniz. Örneğin;

GET http://sitemizinadi.com/dosyadi.php > /dev/null

komutu sonuç bildirimlerini iptal etmeye yarar. Yani cron ile gerçekleştirdiğiniz işlem hiç bir şekilde size bildirilmez.
Eğer sonuçları bir dosyaya kaydetmek istiyorsanız;

GET http://sitemizinadi.com/dosyadi.php > /home/kullaniciadi/public_html/logs/cronjob.log

şeklinde komut girmeniz gerekir. Burada dikkat edilmesi gereken bu komutu yazarken > kullanırsanız, dosyaya daha önce yazılmış olan silinir ve yeni sonuç yazılır. Eğer >> şeklinde kullanırsanız, bu sefer dosyanın içerisindekiler silinmez, dosyanın en altına eklenir.

 


Yöncü Bilişim
Hizmetlerimiz
Ücretsiz Servisler
Sosyal Medyada Biz
Hesap ve IBAN Numaraları Adres, Telefon ve Kroki Belgeler ve İzinler İnsan Kaynakları Referanslarımız İletişim Bilgileri Ücretsiz Üyelik Destek Sistemi Sözleşmeler Hakkımızda Kadromuz SSS
Bedava .tk Uzantılı Domain SSL Güvenlik Sertifikası Alan Adı API ve Bayilik Marka Tescil Hizmeti VDS, VPS Sanal Sunucu Web Tasarım Hizmeti Web Hosting Hizmeti Mail Hosting Hizmeti Yeni Alan Adı Kaydı Alan Adı Backorder Alan Adı Transfer Sunucu Kiralama
Hizmetlerde Online Yönetim Üyeler Arası Aktarım Alan Adı Transfer Kilidi A Record IP Yönlendirme Mail ve SMS Hatırlatma Whois Gizlilik Koruma Alt İsim Sunucu Oluşturma Hazır Uygulama Kurulumu Yapım Aşamasında Sayfası İletişim Bilgi Değiştirme DNS Yönlendirme URL Yönlendirme Satılık Sayfası Teklif Sayfası
Destek Merkezi: Yöncü Bilişim Çözümleri Ltd. Şti.
Tel: +90 (216) 99 000 99 - Faks: +90 (216) 344 18 90
Copyright © 2001 - 2017
Yöncü Bilişim Çözümleri bir OSBIL Markasıdır
Osbil Technology Ltd. - Serbest Liman Bölgesi
S.L.B.T. 447, No:435 Gazimağusa KKTC
Yöncü SSL