• 15-10-2019, 13:08:24
    #1
    Merhaba arkadaşlar 1 tane php dosyam var bu dosya her 1 dk da 1 çalışyor ve her php dosyası api ile bi siteye 10 istekde bulunuyor fakat problem su cronjob 1.si çalışırken görevi bitirmeden 2.cronjob çalışıyor bunların üst üste çalışmasını nasıl engelleyebilirim. fikri olan varmıdır ?
  • 15-10-2019, 13:12:26
    #2
    Yalnızca 1 cronjob file oluşturup, yapacağın tüm işlemleri bu dosyada yapabilirsin. Include ile diğer cronjob etmek istediğin file çağırabilirsin. Tam olarak cronjob ile ne yapmak istediğini bilmediğim için detay veremiyorum
  • 15-10-2019, 13:14:08
    #3
    PHP & Flutter & Laravel
    Veritabanı ile yapabilirsiniz. Örneğin önce veritabanında bir tane alan oluşturun daha sonra dosyanın başına bir sorgu yazın bu sorguda oluşturduğunuz alanın değerini 0 yapın dosyanın sonuna tekrar bir SQL sorgusu yazın bu defada veritabanında ki bilgiyi 1 olarak güncelleyin. Dosyanın en başına yani ilk 0 yaptığınız SQL sorgusunu yazmadan önce kontrol ettirin eğer veritabanındaki değer 0 sa işlem daha bitmemiştir eğer bittiyse 1 olurdu. 0 değilse işlem bitmiş demektir o zaman gerekli kodları çalıştırırsınız. Kodların tamamını görme imkanım olmadığı için böyle bir fikir buldum işinize yarar inşallah
  • 15-10-2019, 13:15:31
    #4
    hocam zaten 1 tane php dosyasında yapıyorum aynı cron tekrar çalışıyor ama öncekinin görevi bitmemiş oluyor yani cron da çalışan php görevini bitirmeden aynı php yi cron tekrar çalıştırıyor ama önceki görevi bitmemiş oluyor yada yarıda kalıyor

    aksoy hocam veritabanında öyle zaten ama api ile bağlandığım site gönderdiğim istek bi kaç kere yarıda kalırsa site banlıyor beni tekrar girip ban açmak zorunda kalıyorum her seferinde
  • 15-10-2019, 13:23:58
    #5
    PHP - WORDPRESS - YAZILIM
    Tamamen örnek veriyorum ;

    İlgili php dosyasının olduğu dizine metin.txt diye bir belge atın içine 0 yazın.

    Her cron işlemi başladığında veriyi 1 yapın, bittiğinde belgenin verisini düzelterek 0 olarak değiştirin.

    daha sonra cronun başınada if ile sorgu yapın if ( dosya verisi == '1' ) { işlem yap } gibi. haliyle cron çalışması için her seferinde verinin 1olmasını arayacak 1 değilse çalıştırmayacak belki size bir yol gösterir.

    https://www.php.net/manual/tr/function.fwrite.php

    buda php dosya içine veri yazdırma kaynağı.


    Test Etmedim şöyle yapabilirsiniz, kodları hemen web siteleri üzerinden aldığım için hatalar olabilir..


    $veri = '0';
    $file_handle = fopen("dosya.txt", "w");
    $file_contents = $veri;
    
    fwrite($file_handle, $file_contents);
    fclose($file_handle);
    
    $file_size = filesize( $dosya );
    $content  = fread( $file_handle , $file_size );
    
    if(strip_tags($content) == '1') {
    
    // Kodlarınız.
    
    $veri = '1';
    $file_handle = fopen("dosya.txt", "w");
    $file_contents = $veri;
    
    fwrite($file_handle, $file_contents);
    fclose($file_handle);
    
    }
    edit : düzeltme.
  • 15-10-2019, 13:28:39
    #6
    PHP & Flutter & Laravel
    Misafir adlı üyeden alıntı: mesajı görüntüle
    hocam zaten 1 tane php dosyasında yapıyorum aynı cron tekrar çalışıyor ama öncekinin görevi bitmemiş oluyor yani cron da çalışan php görevini bitirmeden aynı php yi cron tekrar çalıştırıyor ama önceki görevi bitmemiş oluyor yada yarıda kalıyor

    aksoy hocam veritabanında öyle zaten ama api ile bağlandığım site gönderdiğim istek bi kaç kere yarıda kalırsa site banlıyor beni tekrar girip ban açmak zorunda kalıyorum her seferinde
    Anlatmak istediğim de bu zaten, dosyanın başında 0 yaparsınız sonunda 1 yani işlemr başladığınız da 0 yaparsınız tekrar aynı dosya açıldığında veritabanında 0 olduğu için sizin API kodlarınız çalışmaz böylelikle yarıda kalmış olmaz. İşlem bitince veritabanı 1 olur böylelikle dosya tekrar açıldığında sizin işleminiz çalışır çünkü bir önce ki işlem bitmiştir bu yüzden yarıda kalma gibi bir olay olmaz



    metin_nn adlı üyeden alıntı: mesajı görüntüle
    Tamamen örnek veriyorum ;

    İlgili php dosyasının olduğu dizine metin.txt diye bir belge atın içine 0 yazın.

    Her cron işlemi başladığında veriyi 1 yapın, bittiğinde belgenin verisini düzelterek 0 olarak değiştirin.

    daha sonra cronun başınada if ile sorgu yapın if ( dosya verisi == '1' ) { işlem yap } gibi. haliyle cron çalışması için her seferinde verinin 1olmasını arayacak 1 değilse çalıştırmayacak belki size bir yol gösterir.

    https://www.php.net/manual/tr/function.fwrite.php

    buda php dosya içine veri yazdırma kaynağı.

    edit : düzeltme.
    Bu da kullanılabilir ancak belli bir süre sonra disk okuma yazma kapasitesi I/O aşılabilir veritabanı kullanmak daha performanslı olur.
  • 15-10-2019, 13:34:22
    #7
    dışarda bir yerde (db, txt vs) $calisiliyor = true diye değişken tutacaksınız. Her cron basladıgında kontrol edeceksiniz en tepede. true ise durdur işlem yapma. değilse true yap calıstır, bitince false yap tekrar diyeceksiniz. Mantık bu. bi dakika sonra tekrar calıstıgında false gelecek, ve calısacak.

    --
    bu mantıkta interval 1 dakika olacak.Yani; 1. işlem calıstı. 1dk sonunda bitmedi ama 61. saniyde bitti diyelim.sonraki cron 120. saniyede gelecek. bu demekki 59 sn boş bekleyecek. aşmak için cron suresini 1 dakikanın altına indirmeniz gerekir. [tanıtıcı reklam ]cron job 1 dakika altında çalıştırma linki yardımcı olabilir[/tanıtıcı reklam ]
  • 15-10-2019, 13:38:19
    #8
    Eğer sunucu kendinize aitse shell_exec vb. komutlarla o an çalışan dosyalar içerisinde cronjob dosyasının olup olmadığını kontrol ederek sorunu çözebilirsiniz.
  • 15-10-2019, 13:42:39
    #9
    Üyeliği durduruldu
    İstediğiniz durum için en mantıklı yöntem flock fonksiyonunu kullanmaktır. Örneğine aşağıdaki linkten ulaşabilirsiniz.

    https://www.php.net/manual/tr/function.flock.php