복붙노트

PHP를 사용하여 cron 작업을 만드는 방법은 무엇입니까?

PHP

PHP를 사용하여 cron 작업을 만드는 방법은 무엇입니까?

나는 cron job을 처음 사용합니다. 나는 그것을 쓰는 방법조차 모른다. 인터넷에서 검색을 시도했지만 여전히 잘 이해하지 못합니다. 나는 매분마다 나의 코드를 실행할 크론 작업을 만들고 싶다. 나는 그것을 만들기 위해 PHP를 사용하고 있습니다. 그것은 작동하지 않습니다.

run.php (1 분마다 실행되는 코드)

<?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");

?>

이 두 파일이 같은 폴더에 있다고 가정합니다.

내가 잘못 한 코드가 있습니까? 잘못되었을 경우, 제발 고칠 방법을 친절하게 말해주십시오.

해결법

  1. ==============================

    1.

    이것은 내가 지금까지 발견 한 PHP 코드의 가장 좋은 설명입니다 :

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

    간단히 말해서 :

    언뜻보기 엔 새로운 직업을 예약하는 구문이 힘들어 보일지 모르지만, 일단 깨닫게되면 실제로 이해하기가 상대적으로 간단합니다. cron 작업에는 항상 5 개의 열이 있습니다. 각 열은 연대순으로 '연산자'다음에 전체 경로와 실행 명령을 나타냅니다.

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

    연대 기별 열은 각각 작업 일정과 관련이 있습니다. 그들은 다음과 같습니다 :

    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.
    

    예를 들어, 매월 첫째 날 오전 12시에 작업을 예약하려는 경우 다음과 같이 표시됩니다.

    0 0 1 * * home / path / to / command / the_command.sh

    매주 토요일 오전 8시 30 분에 실행할 작업을 예약하려면 다음과 같이 작성하십시오.

    30 8 * * 6 home / path / to / 명령 / the_command.sh

    또한 일정을 더욱 맞춤화하는 데 사용할 수있는 여러 연산자가 있습니다.

    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
    

    전체 기사 링크를 방문하면 다음과 같이 설명됩니다.

  2. ==============================

    2.

    cron.php를 실행하는 것과 같은 방법으로 다른 PHP 스크립트를 실행할 수 있습니다. CLI 인터페이스를 통해 그렇게해야합니다.

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

    그런 다음 crontab에 항목을 추가하십시오.

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

    run.php 스크립트에 실행 권한이있는 경우 / usr / bin / php 부분없이 crontab에 직접 나열 할 수 있습니다. 스크립트에서 'env php'부분은 PHP 코드를 실제로 실행하기위한 적절한 프로그램을 찾는다. 따라서 '실행 파일'버전의 경우 파일에 실행 권한을 추가하십시오.

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

    crontab에 다음 항목을 추가하십시오.

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

    3.

    Alister에 추가 된 서버의 ssh 세션에서 crontab -e를 입력하여 대개 crontab을 편집 할 수 있습니다 (항상 그런 것은 아님).

    별표 (*는이 단위를 의미 함) :

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

    당신은 이것에 대해 좀 더 여기에서 읽을 수 있습니다.

  4. ==============================

    4.

    이 문제를 해결할 수있는 간단한 방법이 있습니다. 1 분마다 cron으로 PHP 파일을 실행할 수 있으며, PHP 실행 파일 내에서 "if"문을 실행하여 "now"와 같이 실행하면됩니다.

    <?/** 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 */
    }
    
  5. ==============================

    5.

    linux / 우분투 터미널에 다음을 입력하십시오.

     crontab -e 
    

    편집기를 선택하십시오 (언젠가 편집기를 요구할 것입니다) 그리고 이것은 1 분마다 뛰기 위해

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

    6.

    curl을 사용하지 않는 이유는 무엇입니까? 논리적으로 PHP 파일을 실행하면 브라우저에서 url로 실행하게됩니다. 당신이 컬을 돌리면 매우 간단합니다.

    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);
    }
    
  7. ==============================

    7.

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

  8. ==============================

    8.

    이 같은 cronjob을 만들어 매분 작업하십시오.

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

    9.

    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;
            }
    
    }
    
  10. from https://stackoverflow.com/questions/18737407/how-to-create-cron-job-using-php by cc-by-sa and MIT lisence