PHP kullanarak cron işi nasıl oluşturulur?


100

Cron job kullanmakta yeniyim. Nasıl yazılacağını bile bilmiyorum. İnternetten aramayı denedim ama hala anlamıyorum. Kodumu her dakika çalıştıracak bir cron işi oluşturmak istiyorum. Bunu oluşturmak için PHP kullanıyorum. Çalışmıyor.

Misal

run.php (Her dakika çalıştırılacak kod)

<?php

echo "This code will run every minute";

?>

cron.php

<?php

$path = dirname(__FILE__);
$cron = $path . "/run.php";
echo exec("***** php -q ".$cron." &> /dev/null");

?>

Bu iki dosyanın aynı klasörde olduğunu varsayalım.

Yanlış yaptığım kod mu? Yanlışsa, lütfen bana nasıl düzelteceğimi söyleyin.


sunucuda kabuk erişiminiz var mı?

8
Sadece yankılanamaz ve bir cronjob oluşturulmasını bekleyemezsiniz. Cronjob'ların
tlenss

@Dagon: Bunu bilmiyorum. Kontrol edeceğim.
user2738520

Bu tek seferlik bir etkinliktir, bu yüzden kullanıncrontab
Ed Heal

Yanıtlar:


66

Şimdiye kadar bulduğum PHP'deki kodla ilgili en iyi açıklama:

http://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428

Kısacası:

Yeni bir iş planlamanın sözdizimi ilk bakışta ürkütücü görünse de, aslında işi bir kez çözdüğünüzde anlamak nispeten kolaydır. Bir cron işi her zaman, her biri kronolojik bir 'operatörü' temsil eden beş sütuna ve ardından tam yol ve yürütülecek komuta sahip olacaktır:

* * * * * home / yol / to / command / the_command.sh

Kronolojik sütunların her biri, görevin programıyla belirli bir ilgiye sahiptir. Bunlar aşağıdaki gibidir:

Minutes represents the minutes of a given hour, 0-59 respectively.
Hours represents the hours of a given day, 0-23 respectively.
Days represents the days of a given month, 1-31 respectively.
Months represents the months of a given year, 1-12 respectively.
Day of the Week represents the day of the week, Sunday through Saturday, numerically, as 0-6 respectively.

görüntü açıklamasını buraya girin

Bu nedenle, örneğin, her ayın ilk günü saat 12: 00'ye göre bir görev planlamak isterse, şuna benzer:

0 0 1 * * home / yol / komut / the_command.sh

Her Cumartesi sabah 8: 30'da çalışacak bir görev planlamak isteseydik, bunu şu şekilde yazardık:

30 8 * * 6 home / yol / komut / the_command.sh

Programı daha da özelleştirmek için kullanılabilecek bir dizi operatör de vardır:

Commas is used to create a comma separated list of values for any of the cron columns.
Dashes is used to specify a range of values.
Asterisksis used to specify 'all' or 'every' value

Makalenin tamamı için bağlantıyı ziyaret edin, açıklıyor:

  1. Manuel olarak girmek / düzenlemek istiyorsanız cronjob formatı nedir?
  2. Kullanıcı olarak kimlik doğrulamak için SSH2 kitaplığı ile PHP nasıl kullanılır, hangi crontab'ı düzenleyeceksiniz.
  3. Crontab girişlerinin kimlik doğrulaması, düzenlenmesi ve silinmesi için gerekli tüm yöntemleri içeren tam PHP sınıfı.

34

Cron.php'yi çalıştırmaya çalıştığınız şekilde, başka bir PHP betiğini çalıştırabilirsiniz. Yine de bunu CLI arayüzü üzerinden yapmanız gerekecek.

#!/usr/bin/env php
<?php
# This file would be say, '/usr/local/bin/run.php'
// code
echo "this was run from CRON";

Ardından, crontab'e bir giriş ekleyin:

* * * * * /usr/bin/php -f /usr/local/bin/run.php &> /dev/null

Run.php betiğinin çalıştırılabilir izinleri varsa, / usr / bin / php bölümü olmadan doğrudan crontab'da listelenebilir. Komut dosyasındaki 'env php' bölümü, PHP kodunu gerçekten çalıştırmak için uygun programı bulacaktır. Bu nedenle, 'yürütülebilir' sürüm için - dosyaya yürütülebilir izin ekleyin:

chmod +x /usr/local/bin/run.php

ve sonra aşağıdaki girişi crontab'a ekleyin:

* * * * * /usr/local/bin/run.php &> /dev/null

11

Alister'a eklendiğinde, crontab'ı genellikle (her zaman geçerli değildir) sunucudaki bir ssh oturumuna crontab -e girerek düzenleyebilirsiniz.

Yıldızlar şunları temsil eder (* bu birimlerin her biri anlamına gelir):

[Minute] [Hour] [Day] [Month] [Day of week (0 =sunday to 6 =saturday)] [Command]

Bununla ilgili biraz daha buradan okuyabilirsiniz .


2

Linux / ubuntu terminaline aşağıdakileri yazın

 crontab -e 

bir düzenleyici seçin (bazen editöre sorar) ve bu her dakika için çalışır

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null

1

Kendi içeriğinizi barındırmıyorsanız, bu web barındırıcınıza bağlı olabilir. Web barındırıcınız chron işleri oluşturmayı destekliyorsa, frekansı seçmenize ve yürütülecek dosyanın mutlak yolunu girmenize olanak tanıyan doldurmanız için bir formları olabilir. Örneğin, web barındırıcım (DreamHost), dosyanın mutlak yolunu yazarak ve bir seçim menüsünden sıklığı seçerek özel cron işleri oluşturmama izin veriyor. Bu, sunucunuz için mümkün olmayabilir, bu durumda crontab'ı doğrudan veya ana makinenize özel yöntemle düzenlemeniz gerekir.

Yukarıda Alister Bulman ayrıntıları gibi, CLI kullanarak çalıştırmak için bir PHP dosyası oluşturun (dosyanın #!/usr/bin/env phpen başında <?phpetiketinden önce eklemeyi unutmayın . Bu, kabuğun komut dosyası çalıştırılırken hangi yürütülebilir dosyanın çağrılması gerektiğini bilmesini sağlar.


0

neden curl kullanmıyorsun? mantıksal olarak, php dosyasını çalıştırırsanız, bunu tarayıcınızdaki url ile çalıştıracaksınız. curl koşarsan çok basit

while(true)
{
    sleep(60); // sleep for 60 sec = 1 minute

    $s = curl_init();
    curl_setopt($s,CURLOPT_URL, $your_php_url_to_cron); 
    curl_exec($s); 
    curl_getinfo($s,CURLINFO_HTTP_CODE); 
    curl_close($s);
}

5
Bu teoride işe yarayacaktı, ancak php-script'in her zaman çalışması gerekecek ki bu iyi bir şey değil.
bestprogrammerintheworld

1
Bunu sonsuza kadar çalıştırmak için php-max-execution-time değerini 0 olarak ayarlamalısınız. Ayrıca betiğinizde bir hata oluşursa, siz manuel olarak yeniden başlatana kadar tekrar çalışmayacaktır.
Hassan Raza

0

$command = "php ".CRON_PATH.php ";
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $command, "r"));
}else{
shell_exec($command ." > /dev/null &");
}


7
Kodlarınızla ilgilendiğim kadarıyla, açıklar mısınız?
Kıymetli Tom

0

Önce kullanıcı adı ve parola ile SSH sunucunuzu açın ve varsayılan kök kullanıcıya (tüm izinlere sahip kullanıcı) değiştirin, ardından aşağıdaki adımları izleyin,

  1. komutu girin, crontab -lşimdi tüm cronjob'ların listesini göreceksiniz.
  2. crontab -etüm cron işleri ile bir dosya giriniz açılacaktır.
  3. Dosyayı cronjob zamanlamanızla min hr dayofmonth month dayofweek pathtocronjobfiledüzenleyin ve dosyayı kaydedin.
  4. Şimdi bir yanıt göreceksiniz crontab: installing new crontab, cronjobs listesini tekrar kontrol edin, cron işiniz burada listelenecek.

0

Bu görev için Cron projesini Linux cronjob ile birlikte daha iyi kullanın . PHP Kodunuzda çalışma sürelerini yapılandırmanıza olanak tanır, arka plan işlerini destekler ve kullanımı kolaydır.

İlk adım her dakika bir PHP Script'i çağırın:

* * * * * /usr/local/bin/run.php &> /dev/null

İkinci Adım, çalışma zamanlarını doğrudan PHP'de yapılandırmak için cron / cron Paketini kullanın.

$deprecatedStatus = new ShellJob();
$deprecatedStatus->setCommand('cd /app && /usr/local/bin/php cron/updateDeprecatedStatus.php');
$deprecatedStatus->setSchedule(new CrontabSchedule('* * * * */2'));


$displayDate = new ShellJob();
$displayDate->setCommand('cd /app && /usr/local/bin/php cron/updateDisplayDate.php');
$displayDate->setSchedule(new CrontabSchedule('* * * * */5'));

Bağlantılı depoda nasıl kullanılacağıyla ilgili ayrıntıları buldunuz.


-1

Her dakika üzerinde çalışmak için bunun gibi bir cronjob oluşturun

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null

4
Php kullanarak ve herhangi bir terminal veya cpanel kullanmadan cronjob oluşturmak için çözümler aradığımızı düşünüyorum. Ayrıca bu çözümleri sadece php kullanarak bulmak istiyorum.
user3264863

-1

Bunu çözmenin basit bir yolu var: php dosyasını her 1 dakikada bir cron ile çalıştırabilirsiniz ve php çalıştırılabilir dosyası içinde "if" deyimini zaman "now" olduğunda çalıştırabilirsiniz.

<?/** suppose we have 1 hour and 1 minute inteval 01:01 */

$interval_source = "01:01";
$time_now = strtotime( "now" ) / 60;
$interval = substr($interval_source,0,2) * 60 + substr($interval_source,3,2);


if( $time_now % $interval == 0){
/** do cronjob */
}

4
Bu, yalnızca sayfayı yüklerseniz işe yarar, temelde bu bir çözüm değildir!
MD. Atiqur Rahman

Tarayıcıyı kapatırsam ne olur? Bu başarısız!
Resheil Agarwal

-2
function _cron_exe($schedules) {
        if ($obj->get_option('cronenabledisable') == "yes") {
            // $interval = 1*20;
            $interval = $obj->get_option('cronhowtime');
            if ($obj->get_option('crontiming') == 'minutes') {
                $interval = $interval * 60;
            } else if ($obj->get_option('crontiming') == 'hours') {
                $interval = $interval * 3600;
            } else if ($obj->get_option('crontiming') == 'days') {
                $interval = $interval * 86400;
            }
            $schedules['hourlys'] = array(
                'interval' => $interval,
                'display' => 'cronjob'
            );
            return $schedules;
        }

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.