• 25-02-2021, 20:23:17
    #1
    herkese iyi forumlar arkadaşlar,
    her gün belli saatlerde cron job ile işlem yapmak istiyorum, cron job'u istediğim saatte çalıştırmak değilde her dakka çalışan cron dosyam ben veri tabanıma hangi saat aralığını eklemişsem ona göre işlem yapsın,

    şöyle örneklemek gerekirse; ben veritabanımda time türü ile 11:45 olarak bir veri eklemişim cronum her dakka çalıştığı için 11:45 çalışma esnasında istediğim işlemi yapacak,
    bunun için nasıl bir sorgulama kodu yazabilirim 11:43 te girdiğinde işlem yapmıcak 11:44de yapmıcak 11:45te girdiğinde bakacak sütundaki saat ile eşleşiyor o zaman işlemi yapacak,

    yapmak istediğim olay ise aslında şudur; opencart alt yapısı olan eticaret sitemde ürünümün product id'sini olacak fiyatını ayrı bir tabloya kaydedicem hergün o saatte 149.90 yapacak diğer saatte 139.90 diğer saatte 129.90 yapacak sonra akşam bi saattede 149.90 yapacak bitecek.

    bilgisi olan arkadaşların fikirlerini bekliyorum..
  • 25-02-2021, 20:33:48
    #2
    Üyeliği durduruldu
    Sizi doğru mu anladım bilmiyorum ancak bir tablonuz var, tabloda time diye bir sütun var ve burada 12:26 yani Saat : Dakika olarak tutuluyor. Siz cron çalıştığında o eşleşenleri çekmek istiyorsunuz.
    Mesela bu saatlerin tutulduğu tablo cronlar olsun. Cronlar tablosu şu formatta olsun:
    cron_id | urun_id | fiyat | time

    // $db = new PDO('burada mysql bağlantısı yapılır');
    
    $current_time = date('H:i');
    
    $jobs = $db->prepare('SELECT * from cronlar WHERE time = ?');
    $jobs->execute([$current_time]);
    $jobs = $jobs->fetchAll();
    
    foreach($jobs as $job) {
    // burada ilgili satır çekilmiştir. kendi işlemlerinizi yaparsınız. örneğin fiyatlar tablosunda urun_id'ye göre fiyatı güncelleyelim.
    $update = $db->prepare('UPDATE fiyatlar SET fiyat = ? WHERE id = ?');
    $update->execute([$job['fiyat'], $job['urun_id']]);
    }
    Umarım anlatabilmişimdir.
  • 25-02-2021, 20:39:25
    #3
    awoken adlı üyeden alıntı: mesajı görüntüle
    Sizi doğru mu anladım bilmiyorum ancak bir tablonuz var, tabloda time diye bir sütun var ve burada 12:26 yani Saat : Dakika olarak tutuluyor. Siz cron çalıştığında o eşleşenleri çekmek istiyorsunuz.
    Mesela bu saatlerin tutulduğu tablo cronlar olsun. Cronlar tablosu şu formatta olsun:
    cron_id | urun_id | fiyat | time

    // $db = new PDO('burada mysql bağlantısı yapılır');
    
    $current_time = date('H:i');
    
    $jobs = $db->prepare('SELECT * from cronlar WHERE time = ?');
    $jobs->execute([$current_time]);
    $jobs = $jobs->fetchAll();
    
    foreach($jobs as $job) {
    // burada ilgili satır çekilmiştir. kendi işlemlerinizi yaparsınız. örneğin fiyatlar tablosunda urun_id'ye göre fiyatı güncelleyelim.
    $update = $db->prepare('UPDATE fiyatlar SET fiyat = ? WHERE id = ?');
    $update->execute([$job['fiyat'], $job['urun_id']]);
    }
    Umarım anlatabilmişimdir.
    en kısa zamanda bunu deneyip sonucu yazıcam hocam, sanırım istediğim tam olarak bu ancak iş yapacaklarını yazmaya dökme esnasında mantık değişebiliyor yada bu böyle olmazdı ya diyebileceğimiz şeyler çıkıyor, cevabın için çok teşekkürler.
  • 25-02-2021, 20:41:16
    #4
    Direkt cronjob ile değilde,

    cron1.php - cron2.php - cron3.php olarak üç dosya düzenleyip, her birine farklı fiyatlandırma için komutlar verilebilir.
    croncontrol.php dosyası ile zaman fonksiyonuna göre işlem yaptırılabilir.

    Örneğin 15 dakikada bir işlem yapılacak şekilde croncontrol.php dosyasını panelden işletirsiniz.
    cron1.php dosyasına 149TL yapacak şekilde,
    cron2.php dosyasına 139TL yapacak şekilde,
    cron3.php dosyasına ise 129TL yapacak şekilde vb. girilir.

    croncontrol.php dosyasına ise hangi saatte hangi crona yönlendirileceği girilir.
    Misal "13:00 - 15:00 arası cron1.php,
    15:00 - 17:00 arası cron2.php,
    17:00 - 20:00 arası cron3.php dosyasını çalıştır" gibi.


    ---------------------------
    Bunu yapacak şekilde komut bilgim yok, hata varsa affola. Sadece aklıma gelen mantığı aktarmak istedim.
  • 25-02-2021, 20:51:01
    #5
    FurkanErgun adlı üyeden alıntı: mesajı görüntüle
    Direkt cronjob ile değilde,

    cron1.php - cron2.php - cron3.php olarak üç dosya düzenleyip, her birine farklı fiyatlandırma için komutlar verilebilir.
    croncontrol.php dosyası ile zaman fonksiyonuna göre işlem yaptırılabilir.

    Örneğin 15 dakikada bir işlem yapılacak şekilde croncontrol.php dosyasını panelden işletirsiniz.
    cron1.php dosyasına 149TL yapacak şekilde,
    cron2.php dosyasına 139TL yapacak şekilde,
    cron3.php dosyasına ise 129TL yapacak şekilde vb. girilir.

    croncontrol.php dosyasına ise hangi saatte hangi crona yönlendirileceği girilir.
    Misal "13:00 - 15:00 arası cron1.php,
    15:00 - 17:00 arası cron2.php,
    17:00 - 20:00 arası cron3.php dosyasını çalıştır" gibi.


    ---------------------------
    Bunu yapacak şekilde komut bilgim yok, hata varsa affola. Sadece aklıma gelen mantığı aktarmak istedim.
    cevabın için sağol hocam, fikrinde farklı bir yol tabiki ancak ürün sayısı arttıkça bu işlem doğal olarak çekilmez bir yol olur
  • 25-02-2021, 21:43:51
    #6
    awoken adlı üyeden alıntı: mesajı görüntüle
    Sizi doğru mu anladım bilmiyorum ancak bir tablonuz var, tabloda time diye bir sütun var ve burada 12:26 yani Saat : Dakika olarak tutuluyor. Siz cron çalıştığında o eşleşenleri çekmek istiyorsunuz.
    Mesela bu saatlerin tutulduğu tablo cronlar olsun. Cronlar tablosu şu formatta olsun:
    cron_id | urun_id | fiyat | time

    // $db = new PDO('burada mysql bağlantısı yapılır');
    
    $current_time = date('H:i');
    
    $jobs = $db->prepare('SELECT * from cronlar WHERE time = ?');
    $jobs->execute([$current_time]);
    $jobs = $jobs->fetchAll();
    
    foreach($jobs as $job) {
    // burada ilgili satır çekilmiştir. kendi işlemlerinizi yaparsınız. örneğin fiyatlar tablosunda urun_id'ye göre fiyatı güncelleyelim.
    $update = $db->prepare('UPDATE fiyatlar SET fiyat = ? WHERE id = ?');
    $update->execute([$job['fiyat'], $job['urun_id']]);
    }
    Umarım anlatabilmişimdir.
    ufaktan başlayım dedim hocam ancak veri tabanında saat sütununu time olarak yaptığımda 12:26:45 olarak çıkarıyor yani saniyede çıkıyor, bu şekilde nasıl bir sorgulama yapabiliriz,
    gerçi ben kaydederken 12:26 yazdığımda veritabanında sütuna 12:26:00 olarak işleyecek ve sorgulama esnasında da 12:26:00 olarak sorgulayacak sanırım $current_time = date('H:i:s'); yapıcaz ozaman sanırım.

    ee bu seferde cron 12:26:08 de çalışırsa ozaman bi sonuç bulamayacak
  • 26-02-2021, 21:19:53
    #7
    banada lazım belli saatlerde çalışan cron sistemi. Her dakika yada her saatinde dışında. takipteyim
  • 28-02-2021, 20:27:28
    #8
    henüz bir sonuca varabilmiş değilim arkadaşlar, bilgisi olan arkadaşların yardımına ihtiyacım var.
  • 01-03-2021, 01:10:49
    #9
    $dt = date('Y-m-d'); $st = date('H'); $dk = date('i');
    $query = $db->query("SELECT * from cronlar WHERE DATE(time) = '{$dt}' AND HOUR(time) = '{$st}' AND MINUTE(time) = '{$dk}'", PDO::FETCH_ASSOC);
    şöyle bir sorgu işini görür sanırım