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


100

cron 작업을 처음 사용합니다. 어떻게 쓰는지도 모르겠어요. 인터넷에서 검색을 해봤지만 아직 잘 모르겠습니다. 매분 내 코드를 실행할 크론 작업을 만들고 싶습니다. 나는 그것을 만들기 위해 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");

?>

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

내가 잘못한 코드입니까? 틀렸다면 친절하게 고쳐주세요.


서버에 셸 액세스 권한이 있습니까?

8
***를 에코 아웃하고 cronjob이 생성 될 것으로 기대할 수 없습니다. cronjobs (당신이 실행하는 서버에 리눅스에있는 가정)을 만드는 방법을 여기까지 읽어 thesitewizard.com/general/set-cron-job.shtml
tlenss

@Dagon : 나는 이것에 대해 모른다. 제가 그것을 확인해 보겠습니다.
user2738520

일회성 이벤트이므로 사용crontab
Ed Heal

답변:


66

지금까지 찾은 PHP 코드에 대한 가장 좋은 설명입니다.

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

요컨대 :

새 작업을 예약하는 구문이 언뜻보기에는 어렵게 보일 수 있지만 실제로는 일단 분할하면 이해하기가 비교적 간단합니다. 크론 작업에는 항상 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.

여기에 이미지 설명 입력

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

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

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

30 8 * * 6 home / path / to / command / 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

전체 기사를 보려면 링크를 방문하십시오.

  1. 수동으로 입력 / 편집하려는 경우 cronjob의 형식은 무엇입니까?
  2. SSH2 라이브러리와 함께 PHP를 사용하여 편집 할 crontab을 사용자로 인증하는 방법.
  3. crontab 항목을 인증, 편집 및 삭제하는 데 필요한 모든 방법이 포함 된 전체 PHP 클래스.

34

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

11

Alister에 추가되어 서버의 ssh 세션에 crontab -e를 입력하여 일반적으로 (항상 그렇지는 않음) crontab을 편집 할 수 있습니다.

별은 다음을 나타냅니다 (*는이 단위를 모두 의미 함).

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

여기에서 이에 대한 자세한 내용을 읽을 수 있습니다 .


2

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

 crontab -e 

편집기를 선택하면 (때때로 편집기를 요청 함) 매분 실행됩니다.

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

1

자신의 콘텐츠를 호스팅하지 않는 경우 웹 호스트에 따라 달라질 수 있습니다. 웹 호스트가 chron 작업 생성을 지원하는 경우, 빈도를 선택하고 실행할 파일의 절대 경로를 입력 할 수있는 양식을 작성할 수 있습니다. 예를 들어, 내 웹 호스트 (DreamHost)를 사용하면 파일의 절대 경로를 입력하고 선택 메뉴에서 빈도를 선택하여 사용자 지정 크론 작업을 만들 수 있습니다. 이것은 서버에서 가능하지 않을 수 있으며,이 경우 crontab을 직접 편집하거나 호스트 별 방법을 통해 편집해야합니다.

위의 Alister Bulman이 자세히 설명했듯이 CLI를 사용하여 실행할 PHP 파일을 만듭니다 ( 태그 #!/usr/bin/env php앞 파일의 맨 처음에 포함해야합니다 <?php. 이렇게하면 스크립트를 실행할 때 어떤 실행 파일을 호출해야하는지 쉘이 알 수 있습니다.


0

왜 컬을 사용하지 않습니까? 논리적으로 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);
}

5
이것은 이론적으로 작동하지만 php-script는 항상 실행되어야하는 좋은 일이 아닙니다.
bestprogrammerintheworld

1
이것을 영원히 실행하려면 php-max-execution-time을 0으로 설정해야합니다. 또한 스크립트에 오류가 발생하면 수동으로 다시 시작할 때까지 다시 실행되지 않습니다.
Hassan Raza 2018

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 &");
}


6
내가 당신의 코드에 관심이 많은만큼 설명해 주시겠습니까?
Precious Tom

0

먼저 사용자 이름과 암호로 SSH 서버를 열고 기본 루트 사용자 (모든 권한을 가진 사용자)로 변경 한 다음 아래 단계를 따르십시오.

  1. crontab -l이제 명령을 입력하면 모든 cronjob 목록이 표시됩니다.
  2. crontab -e모든 cron 작업이있는 파일을 입력 하면 열립니다.
  3. cronjob 일정으로 파일을 편집하고 파일을 min hr dayofmonth month dayofweek pathtocronjobfile저장합니다.
  4. 이제 응답이 crontab: installing new crontab다시 표시됩니다. 크론 작업이 나열 될 크론 작업 목록을 확인합니다.

0

이 작업을 위해 Linux cronjob과 함께 프로젝트 Cron 을 사용하는 것이 좋습니다. PHP 코드에서 실행 시간을 구성하고 백그라운드 작업을 지원하며 사용하기 쉽습니다.

첫 번째 단계는 매분 PHP 스크립트를 호출합니다.

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

두 번째 단계는 cron / cron 패키지를 사용하여 PHP에서 직접 런타임을 구성합니다.

$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'));

링크 된 저장소에서 사용하는 방법에 대한 세부 사항을 찾았습니다.


-1

매분마다 작동하도록 이와 같은 cronjob을 만듭니다.

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

4
터미널이나 cpanel을 사용하지 않고 PHP를 사용하여 cronjob을 만드는 솔루션을 찾고 있다고 생각합니다. 나는 또한 PHP만을 사용 하여이 솔루션을 찾고 싶습니다.
user3264863

-1

이 문제를 해결하는 간단한 방법이 있습니다. 1 분마다 cron으로 php 파일을 실행할 수 있으며, php 실행 파일 내부에서 "if"문이 "지금"과 같이 실행될 때 실행할 수 있습니다.

<?/** 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
이것은 페이지를로드하는 경우에만 작동합니다. 기본적으로 이것은 해결책이 아닙니다!
MD. ATIQUR 라만

브라우저를 닫으면 어떻게됩니까? 이것은 실패합니다!
Resheil Agarwal 2018 년

-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;
        }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.