Merhabalar,
Windows üzerinde php dosyasını cronjob yapmak için task manager vb. şeylerle uğraşmaktan sıkıldım ve olaya el attım ortaya aşağıdaki gibi bir şey çıktı.
Derli Uygulama, Dosyalar ve Kaynak Kodları İçin : wwPHP Projeler
wwJobber toplam 3 tane dosyadan oluşmaktadır bunlar ve amaçları aşağıdaki gibidir :
1- crontab.txt :
Bu dosyanın içerisine hangi *.php dosyası ne zaman çalıştırılacak, dosya hangi lokasyonda bunları tanımlıyoruz.
2- config.txt
php.exe’nin ve crontab.txt’nin bulunduğu lokasyonları girdiğimiz kısım.
3- wwJobber.py
buda işi yapan arkadaş.
Gelelim Kaynak Kodlarına, Dosyalara ve Kullanımına :
Öncelikle Kullandığımız Kütüphaneler :
1 2 3 |
import datetime; import subprocess; import time; |
Yukarıda da gözüktüğü gibi Python‘da halihazırda bulunan datetime, subprocess ve time kütüphanelerini kullanıyoruz.
Zamanlama için kullandığımız kodlar :
1 2 3 4 5 |
ay = datetime.datetime.now().strftime("%m"); gun = datetime.datetime.now().strftime("%d"); saat = datetime.datetime.now().strftime("%H"); dakika = datetime.datetime.now().strftime("%M"); saniye = datetime.datetime.now().strftime("%S"); |
Crontab.txt’de bulunan verileri çekmek için kullandığımız kodlar :
1 2 3 4 5 6 7 8 9 10 |
PHPYolu = ""; CrontabYolu = ""; with open("E:\Python33\proje\config.txt") as f: a = 0; for line in f: if(a == 0): PHPYolu = line; if(a == 1): CrontabYolu = line; a = a + 1; |
Yukarıda bulunan “E:\Python33\proje\config.txt” kısmını config.txt’yi konumlandırdığınız dizin ile değiştirin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
ins = open( CrontabYolu.rstrip(), "r+" ) for line in ins: splt = line.split('-', ); #print(splt); print(line); print(saniye); if(splt[0] == "*" and splt[1] == "*" and splt[2] == "*" and splt[3] == "*" and splt[4] == "*"): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[4] != "*" and splt[4] == ay): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[3] != "*" and splt[3] == gun): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[2] != "*" and splt[2] == saat): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[1] != "*" and splt[1] == dakika): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[0] != "*" and splt[0] == saniye): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[0] == "*"): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); ins.close(); time.sleep(1); |
Yukarıdaki kısımda da crontab.txt dosyasında bulunan verileri satır, satır çekip sırasıyla ay, gun, saat, dakika ve saniye kontrolleri yaparak “subprocess.call” komutuyla “php.exe -f *.php” şeklinde php dosyamızı php.exe’ye yorumlattıran kısım.
Kaynak kodların tamamı aşağıdaki gibidir :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import datetime; import subprocess; import time; while 1: # Tarih Bilgileri Baslangic ay = datetime.datetime.now().strftime("%m"); gun = datetime.datetime.now().strftime("%d"); saat = datetime.datetime.now().strftime("%H"); dakika = datetime.datetime.now().strftime("%M"); saniye = datetime.datetime.now().strftime("%S"); # Tarih Bilgileri Bitis PHPYolu = ""; CrontabYolu = ""; with open("E:\Python33\proje\config.txt") as f: a = 0; for line in f: if(a == 0): PHPYolu = line; if(a == 1): CrontabYolu = line; a = a + 1; ins = open( CrontabYolu.rstrip(), "r+" ) for line in ins: splt = line.split('-', ); #print(splt); print(line); print(saniye); if(splt[0] == "*" and splt[1] == "*" and splt[2] == "*" and splt[3] == "*" and splt[4] == "*"): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[4] != "*" and splt[4] == ay): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[3] != "*" and splt[3] == gun): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[2] != "*" and splt[2] == saat): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[1] != "*" and splt[1] == dakika): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[0] != "*" and splt[0] == saniye): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); else: if(splt[0] == "*"): subprocess.call('"'+PHPYolu.rstrip()+'" -f "'+splt[5].rstrip()+'"', shell=True); ins.close(); time.sleep(1); |
Yukarıda bulunan kütüphaneleri ve kodları daha iyi anlamak için aşağıdaki yazılarımdan faydalanabilirsiniz.
Python ile saat, tarih işlemleri
Python ile exec komutunun çalıştırılması
Python ile dosyadan veri okuma
Kullanımı :
crontab.txt dosyası içerisinde her bir satıra aşağıdaki gibi cron görevi ekleyebilirsiniz:
Saniye-Dakika-Saat-Gün-Ay-Çalıştırılacak PHP Dosyası
Örnek crontab.txt içeriği :
1- Aşağıdaki blok test1.php dosyasını saniye her 20 olduğunda çalışmasını sağlar.
20-*-*-*-*-E:\Python33\\test1.php
2- Aşağıdaki blok test1.php dosyasının her saniye çalışmasını sağlar.
*-*-*-*-*-E:\Python33\\test1.php
Projenin Derli Uygulama, Dosyalar ve Kaynak Kodları İçin : wwPHP Projeler
Buyrun tepe, tepe kullanın.
Saygılarımla…