Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Cron Sorunu

cpa

0
Onaylı Üye
Üye
Katılım
29 Temmuz 2004
Mesajlar
102
Açılan Konu
14
Tepki puanı
0
Şöyle bir sorunum var. cron.test.php adında bir php dosyası var, bu dosya çalıştırıldığı zaman, aynı dizinde adı çalıştırıldığı zaman olan (2005-06-06_12:32:45.txt gibi) bir txt dosyası oluşturuyor. Bu dosyayı çalıştıran komutu dakikada bir çalışacak şekilde cpanelden ekliyorum. Çalışmıyor. Servera root olarak girip konsoldan ekliyorum, yine çalışmıyor. Sizce bunun nedeni ne olabilir? Server yönetimi hakkında fazla bir bilgim yok o yüzden ayrıntılı bilgi veremedim fakat sizin yönlendirmenize göre ayrıntılı bilgi de verebilirim. Başka bir serverda cronu çok rahat kullanıyorum hiç konsola gerek kalmadan. Sorun nerede anlayamadım.

cron.test.php nin çalıştırılmadığını, dizin içinde hiç yeni txt dosyasının oluşmamış olmasından anlıyorum. Dosya içeriği şöyle :

PHP:
<?php
include "ayarlar.php";
class TarihSinif { //Tarih Sınıfı Başlar.
    function Al($format) { //Tarihi Belirtilen Formata Göre Hesaplayıp Geri Döndürür.
        global $_ayar;
        return date($format, mktime(date("H"), date("i")+$_ayar["ZamanFarki"], date("s"), date("m"), date("d"), date("Y")));
    }
} //Tarih Sınıfı Biter.
$Tarih = new TarihSinif();
$handle = fopen($Tarih->Al("Y-m-d H:i:s").".txt", 'a');
fwrite($handle, $Tarih->Al("Y-m-d H:i:s"));
fclose($handle);
?>

Eklediğim cronda şöyle
* * * * * php -f /home/xyztuv/public_html/abcdef/cron.test.php
 

iyinet

Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,034
Açılan Konu
485
Tepki puanı
75
Konum
SEO
darXis in onerdigi wget ile cagirma webserver kurulu ise calisir, webserver durdugunda calismaz. Web servera bagimli cronlar oyle yada boyle sorun cikartabilir.

Her halukarda calismasi icin:
Programi full path(tum dizin) leri ile yazmadiysan program buyuk ihtimalle cronda calismaz.
Ancak php nin CGI varsiyonu isimizi biraz kolaylastirir ve default olarak programi calistirdiginiz dizine gecer.
Eger php CGI degilde CLI kullanirsaniz (ki bircok kisi neyi kullandigini bilmez), CLI programin calistigi dizine gecmez.
Komut satirinda "php -v" yazdiginizda CGI yada CLI oldugunu gorursunuz.


1. Eger elinizde PHP yi secme gibi bir secenek yok ise, programin en basinda chdir() komutu ile programin oldugu dizine gecis yapin.

PHP:
<?php 
chdir("/home/xyztuv/public_html/abcdef"); 
include "ayarlar.php"; 
class TarihSinif { //Tarih Sınıfı Başlar. 
    function Al($format) { //Tarihi Belirtilen Formata Göre Hesaplayıp Geri Döndürür. 
        global $_ayar; 
        return date($format, mktime(date("H"), date("i")+$_ayar["ZamanFarki"], date("s"), date("m"), date("d"), date("Y"))); 
    } 
} //Tarih Sınıfı Biter. 
$Tarih = new TarihSinif(); 
$handle = fopen($Tarih->Al("Y-m-d H:i:s").".txt", 'a'); 
fwrite($handle, $Tarih->Al("Y-m-d H:i:s")); 
fclose($handle); 
?>

2. ve aslinda yapilmasi gereken yontem ise full path kullanimi:

PHP:
<?php 
include "/home/xyztuv/public_html/abcdef/ayarlar.php"; 
class TarihSinif { //Tarih Sınıfı Başlar. 
    function Al($format) { //Tarihi Belirtilen Formata Göre Hesaplayıp Geri Döndürür. 
        global $_ayar; 
        return date($format, mktime(date("H"), date("i")+$_ayar["ZamanFarki"], date("s"), date("m"), date("d"), date("Y"))); 
    } 
} //Tarih Sınıfı Biter. 
$Tarih = new TarihSinif(); 
$handle = fopen("/home/xyztuv/public_html/abcdef".$Tarih->Al("Y-m-d H:i:s").".txt", 'a'); 
fwrite($handle, $Tarih->Al("Y-m-d H:i:s")); 
fclose($handle); 
?>

3. olarakta cron satirini olusturuken her dosyayi, php yi bile full path girin:
php nin asil yerini ogrenmek icin "which php" yazabilirsiniz

PHP:
* * * * * /usr/local/bin/php -q /home/xyztuv/public_html/abcdef/cron.test.php
4. Eger olusabilecek hatalarin mesajlarin rahatsiz etmesini istemiyorsaniz, hata ve ekran cikti birimlerini /dev/lisanssız a yonlendirin:

PHP:
* * * * * /usr/local/bin/php -q /home/xyztuv/public_html/abcdef/cron.test.php > /dev/lisanssız 2>&1

5. En temiz yontem, php yi program icinden cagirmaktir:

PHP:
#!/usr/local/bin/php -q
<?php 
include "/home/xyztuv/public_html/abcdef/ayarlar.php"; 
class TarihSinif { //Tarih Sınıfı Başlar. 
    function Al($format) { //Tarihi Belirtilen Formata Göre Hesaplayıp Geri Döndürür. 
        global $_ayar; 
        return date($format, mktime(date("H"), date("i")+$_ayar["ZamanFarki"], date("s"), date("m"), date("d"), date("Y"))); 
    } 
} //Tarih Sınıfı Biter. 
$Tarih = new TarihSinif(); 
$handle = fopen("/home/xyztuv/public_html/abcdef".$Tarih->Al("Y-m-d H:i:s").".txt", 'a'); 
fwrite($handle, $Tarih->Al("Y-m-d H:i:s")); 
fclose($handle); 
?>

Programi calisir hale getirmek icin:

PHP:
chmod 755 cron.test.php

Bu programin cron entry si digerlerinden farklidir:

PHP:
* * * * * /home/xyztuv/public_html/abcdef/cron.test.php > /dev/lisanssız 2>&1
 

cpa

0
Onaylı Üye
Üye
Katılım
29 Temmuz 2004
Mesajlar
102
Açılan Konu
14
Tepki puanı
0
Cevaplarınız için teşekkürler. Yalnız hala sorunuma çözüm getiremedim.

crontab -e yazdıktan sonra cronu şu şekilde ekledim

* * * * * /usr/local/bin/php -q /home/xyztuv/public_html/abcdef/cron.test.php > /dev/lisanssız 2>&1

Ama yine olmadı. Daha sonra konsola direk komutu yazarak denedim.
/usr/local/bin/php -q /home/xyztuv/public_html/abcdef/cron.test.php > /dev/lisanssız 2>&1

Program çalıştı. Yani komutta bir sorun yok anladığım kadarıyla. Anlaşılan eklediğim komut cron tarafından dakikada bir çalıştırılmıyor. Diğer dediklerinizi de denedim onlar da olmadı. Sizce bunun sebebi ne olabilir?
 
M

mfk_1868

Misafir
yolu belirtirken /home/xyztuv belirtme direk public_html die basla sorunun cozulur ayrıca dosyaların basına serverın php yolunuda eklemeyi unutma:)
 

cpa

0
Onaylı Üye
Üye
Katılım
29 Temmuz 2004
Mesajlar
102
Açılan Konu
14
Tepki puanı
0
mfk dediğin yol bana saçma gibi geldi çünkü ben cronu roottan ekliyorum. xyztuv bir kullanıcı ve bunun gibi birçok kullanıcı var serverda. Ben kullanıcıyı belirtmeden publicten başlarsam dosyayı nasıl bulabilir sence? Ama yine de dediğin gibi denedim ve yine beklediğim sonucu aldım. Çalışmadı. Dosyalarımın başına php yolunu da ekleyip denemiştim zaten iyinetadmin ayrıntılı bir şekilde açıklamış. Yine de olmuyor. Sizce sorun ne olabilir acaba?
 

Angelo

0
Onaylı Üye
Üye
Katılım
13 Aralık 2004
Mesajlar
9,603
Açılan Konu
164
Tepki puanı
106
Konum
AZ
cron log dosyasina bakip bastigi erroru soylersen daha net bir cevap verebiliriz.
 

cpa

0
Onaylı Üye
Üye
Katılım
29 Temmuz 2004
Mesajlar
102
Açılan Konu
14
Tepki puanı
0
Anlaşılan o ki cron çalışmıyormuş, durmuş. Sorun buydu hallettim. Onu tekrar çalıştırmak nasıl aklıma gelmedi anlamadım. :) Hepinize teşekkürler. Özellikle iyinetadmine yazdığı ayrıntılı yazı için tekrar teşekkürler...
 
M

mfk_1868

Misafir
cpa' Alıntı:
mfk dediğin yol bana saçma gibi geldi çünkü ben cronu roottan ekliyorum. xyztuv bir kullanıcı ve bunun gibi birçok kullanıcı var serverda. Ben kullanıcıyı belirtmeden publicten başlarsam dosyayı nasıl bulabilir sence? Ama yine de dediğin gibi denedim ve yine beklediğim sonucu aldım. Çalışmadı. Dosyalarımın başına php yolunu da ekleyip denemiştim zaten iyinetadmin ayrıntılı bir şekilde açıklamış. Yine de olmuyor. Sizce sorun ne olabilir acaba?
roottan eklersen dedigin dogru ama cpanelde o userinkinden eklersen benim dedigim sekilde calısıyor yani ben oyle kullanıyorum neyse sorunun hallolmus onemli olan o:)
 
U

ultraturknet

Misafir
Arkadaşlar hazır konusu açılmışken bende birşey sorucam, pathler konusunda hiçbir sorunu olmayan bir cron satırım var(php -f şeklinde, wget falan değil), daha önce gayet de güzel çalışıyordu. Ama server admini benim alanı başka servera taşıdıktan sonra çalışmaz oldu. Cron işlem sonucunu mailime yönlendirdiğim zaman şu mesajı alıyorum:
"You don't have any language files! You must upload at least one language."

Hangi dil dosyasından bahsediyor, ne yapmak lazım anlamadım. Admine söylediğimde "senin scriptten kaynaklanıyordur" diye attı resmen. Scriptle alakası yok tabii. Nedir bu, bir fikriniz var mı?
 

iyinet

Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,034
Açılan Konu
485
Tepki puanı
75
Konum
SEO
ultraturknet' Alıntı:
Arkadaşlar hazır konusu açılmışken bende birşey sorucam, pathler konusunda hiçbir sorunu olmayan bir cron satırım var(php -f şeklinde, wget falan değil), daha önce gayet de güzel çalışıyordu. Ama server admini benim alanı başka servera taşıdıktan sonra çalışmaz oldu. Cron işlem sonucunu mailime yönlendirdiğim zaman şu mesajı alıyorum:
"You don't have any language files! You must upload at least one language."

Hangi dil dosyasından bahsediyor, ne yapmak lazım anlamadım. Admine söylediğimde "senin scriptten kaynaklanıyordur" diye attı resmen. Scriptle alakası yok tabii. Nedir bu, bir fikriniz var mı?

Sanirim cron eskiden PHP nin CGI versiyonunu kullaniyormus ve simdi CLI kullaniyor. Cron dan cagrilan programin en basinda programin oldugu dizine gec (chdir ile).
 
U

ultraturknet

Misafir
iyinetadmin' Alıntı:
Sanirim cron eskiden PHP nin CGI versiyonunu kullaniyormus ve simdi CLI kullaniyor. Cron dan cagrilan programin en basinda programin oldugu dizine gec (chdir ile).

Teşekkürler, benim host adminden daha iyi bir cevap bu:)
Fakat telnet vs.olayı yok bende, cpanelden dediğini(chdir) nasıl yapacağım, bir komut satırı şeklinde gösterebilir misin?
 

Angelo

0
Onaylı Üye
Üye
Katılım
13 Aralık 2004
Mesajlar
9,603
Açılan Konu
164
Tepki puanı
106
Konum
AZ
Yeni bir cron yarat eskisini sil.
/path/to/mycron diye execute et.
mycron dosyasinin icine de

---
#!/bin/bash
cd /php/yolu
php -f dosya.php
---

Direk php dosyasini da editleyebilirsin ama icerigini bilemiyorum onun.
 
Üst