복붙노트

PHP : 예약 된 작업 실행 (cron 작업)

PHP

PHP : 예약 된 작업 실행 (cron 작업)

웹 웹 사이트에 예약 된 작업을하고 싶습니다. 이것을 달성하기위한 어떤 방법을 권하고 싶습니까?

지금까지 생각한 것은 모든 페이지의 맨 위에 스크립트를 포함시킨 다음이 스크립트가이 작업을 실행할 시간인지 여부를 확인하도록합니다.

이것은 내가 생각하고있는 것의 간단한 예일뿐입니다.

if ($alreadyDone == 0 && time() > $timeToRunMaintainance) {
   runTask();
   $timeToRunMaintainance = time() + $interval;
} 

내가 고려해야 할 다른 것 또는 이것보다 좋은 방법이 있습니까?

해결법

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

    1.그것이 cronjobs가 만들어진 것입니다. man crontab은 리눅스 서버를 운영하고 있다고 가정합니다. 셸 액세스가 없거나 cronjob을 설정할 방법이없는 경우 외부 서버에 cronjob을 설치하고 URL 중 하나를 ping하는 무료 서비스가 있습니다.

    그것이 cronjobs가 만들어진 것입니다. man crontab은 리눅스 서버를 운영하고 있다고 가정합니다. 셸 액세스가 없거나 cronjob을 설정할 방법이없는 경우 외부 서버에 cronjob을 설치하고 URL 중 하나를 ping하는 무료 서비스가 있습니다.

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

    2.나는이 정확한 해결책을 언급 한 사람이 아무도 없기 때문에 지금 대답하고 있습니다.

    나는이 정확한 해결책을 언급 한 사람이 아무도 없기 때문에 지금 대답하고 있습니다.

    현재 작업하고있는 사이트에서 cPanel을 사용하여 cron 작업을 설정했지만 PHP Interpreter를 직접 실행하는 대신 (CodeIgniter를 사용하고 코드가 컨트롤러 함수에 매핑 되었기 때문에 이것이 아마도 ' t 좋은 아이디어) 우리는 wget을 사용하고 있습니다.

    wget -q -O cron_job.log http://somehost/controller/method
    

    -q는 wget이 출력을 생성하지 않도록하기 때문에 (이메일을 계속 수신하지 않으므로). -O cron_job.log는 컨트롤러가 생성 한 내용을 로그 파일에 저장합니다 (매번 덮어 쓰므로 계속 증가하지 않습니다).

    나는 이것이 '적절한'cron 작업을하는 가장 쉬운 방법이라는 것을 알았습니다.

  3. ==============================

    3.cPanel 호스트가있는 경우 웹 인터페이스를 통해 cron 작업을 추가 할 수 있습니다. 고급 -> Cron Jobs로 이동하여 고급이 아닌 형식을 사용하여 cron 주파수를 설정하십시오. 다음과 같은 명령을 원한다.

    cPanel 호스트가있는 경우 웹 인터페이스를 통해 cron 작업을 추가 할 수 있습니다. 고급 -> Cron Jobs로 이동하여 고급이 아닌 형식을 사용하여 cron 주파수를 설정하십시오. 다음과 같은 명령을 원한다.

    /usr/bin/php /path/to/your/php/script.php
    
  4. ==============================

    4.cron에서 PHP 스크립트를 실제로 실행하는 방법을 알고 싶다면 두 가지 옵션이 있습니다 : PHP 인터프리터를 직접 호출 (예 : "php /foo/myscript.php")하거나 lynx (lynx http : // mywebsite. co.kr / myscript.php). 어떤 스크립트를 선택 하느냐는 주로 스크립트가 환경을 어떻게 구성해야하는지에 달려 있습니다. 쉘이나 웹 브라우저를 통해 호출하는지 여부에 따라 경로와 파일 액세스 권한이 달라집니다. lynx를 사용하는 것이 좋습니다.

    cron에서 PHP 스크립트를 실제로 실행하는 방법을 알고 싶다면 두 가지 옵션이 있습니다 : PHP 인터프리터를 직접 호출 (예 : "php /foo/myscript.php")하거나 lynx (lynx http : // mywebsite. co.kr / myscript.php). 어떤 스크립트를 선택 하느냐는 주로 스크립트가 환경을 어떻게 구성해야하는지에 달려 있습니다. 쉘이나 웹 브라우저를 통해 호출하는지 여부에 따라 경로와 파일 액세스 권한이 달라집니다. lynx를 사용하는 것이 좋습니다.

    한 가지 부작용은 실행될 때마다 전자 메일을 받는다는 것입니다. 이 문제를 해결하기 위해, 나는 cron PHP 스크립트가 아무 것도 출력하지 못하게한다. 성공적으로 끝내면 아무 것도, 공백이 아니어야한다. 실패하면 오류 메시지가 출력된다. 그런 다음 cron에서 작은 PHP 스크립트를 사용하여 호출합니다. 이 방법은 실패 할 경우에만 전자 메일을받습니다. 이는 쉘 스크립트가 lynx가 아닌 HTTP 요청을한다는 점을 제외하면 기본적으로 lynx 메소드와 같습니다.

    이 스크립트를 "docron"또는 무엇인가 (chmod + x를 기억하십시오) 호출하고 crontab에서 "docron http://mydomain.com/myscript.php"명령을 사용하십시오. 페이지가 뭔가를 반환하면 HTML 전자 메일로 페이지의 출력을 전자 메일로 보냅니다.

    #!/usr/bin/php
    <?php
    
    $h = @file_get_contents($_SERVER['argv'][1]);
    
    if ($h === false)
    {
            $h = "<b>Failed to open file</b>: " . $_SERVER['argv'][1];
    }
    
    if ($h != '')
    {
            @mail("cron@mydomain.com", $_SERVER['argv']['1'], $h, "From: cron@mydomain.com\nMIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-1");
    }
    
    ?>
    
  5. ==============================

    5.혹시 ATrigger 보셨나요? 또한 PHP 라이브러리를 사용하여 오버 헤드없이 예약 된 작업을 시작할 수 있습니다.

    혹시 ATrigger 보셨나요? 또한 PHP 라이브러리를 사용하여 오버 헤드없이 예약 된 작업을 시작할 수 있습니다.

    면책 조항 : 나는 그들의 팀에 속해있다.

  6. ==============================

    6.cron 작업과 기타 등등을 설정하지 않으려면 (더 나은 방법이라고 제안 할 수도 있지만) 제공 한 솔루션은 꽤 좋습니다. 많은 프로젝트에서 필자는 PHP 스크립트 자체가 업데이트를 실행할 시간인지 여부를 확인하도록했습니다.

    cron 작업과 기타 등등을 설정하지 않으려면 (더 나은 방법이라고 제안 할 수도 있지만) 제공 한 솔루션은 꽤 좋습니다. 많은 프로젝트에서 필자는 PHP 스크립트 자체가 업데이트를 실행할 시간인지 여부를 확인하도록했습니다.

    아래쪽 (좋아, 아래쪽 중 하나)은 일정 기간 동안 아무도이 앱을 사용하지 않으면 스크립트가 실행되지 않는다는 것입니다.

    특정 시점에 아무도 앱을 사용하지 않으면 스크립트가 실행되지 않는다는 것이 장점입니다. 내가 설정 한 작업은 "캐시 파일 업데이트", "일일 백업 수행"및 기타 등등과 같은 것들입니다. 누군가가 앱을 사용하지 않는다면 캐시 파일을 업데이트 할 필요가 없으며 백업 할 데이터베이스가 변경되지 않습니다.

    귀하의 방법에 대한 유일한 수정은 누군가가 성공적으로 로그인 할 때만 해당 검사를 실행한다는 것입니다. 모든 페이지로드를 확인할 필요는 없습니다.

  7. ==============================

    7.Cron은 스케줄링 문제를 해결하는 범용 솔루션입니다. 그러나 당신이 커지고 일정이 자주 바뀌면 신뢰성 / 중복 문제가 발생할 수 있습니다. 당신이 그런 문제를 보는 경우에, supervise 또는 더 정교한 monit 같이 무언가를 고려하십시오.

    Cron은 스케줄링 문제를 해결하는 범용 솔루션입니다. 그러나 당신이 커지고 일정이 자주 바뀌면 신뢰성 / 중복 문제가 발생할 수 있습니다. 당신이 그런 문제를 보는 경우에, supervise 또는 더 정교한 monit 같이 무언가를 고려하십시오.

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

    8.cpanel을 사용하는 경우 다음과 같이 추가해야합니다.

    cpanel을 사용하는 경우 다음과 같이 추가해야합니다.

    /usr/local/bin/php -q /home/yoursite/public_html/yourfile.php
    
  9. ==============================

    9.당신이 cronjobs 또는 아무것도 외부 사용하고 싶지 않다면, 당신이 사용하는 방법은 괜찮아요,하지만 이들은 페이지가로드 될 때마다 확인하기 위해 무거울 수 있습니다.

    당신이 cronjobs 또는 아무것도 외부 사용하고 싶지 않다면, 당신이 사용하는 방법은 괜찮아요,하지만 이들은 페이지가로드 될 때마다 확인하기 위해 무거울 수 있습니다.

    처음에는 일부 cronjob을 교체 할 수 있습니다. 예를 들어, 웹 사이트에 등록한 사용자 수에 대한 카운터가있는 경우 사용자가 등록 할 때이 번호를 간단히 업데이트 할 수 있으므로 cronjob 또는 예약 된 작업을 사용할 필요가 없습니다.

    예약 된 작업을 사용하려면 지금 사용하고있는 방법을 약간 수정하여 사용하는 것이 좋습니다. 사이트에 하루 동안 충분한 히트가 있다면 간단히 작업을 실행 (또는 작업 검사 기능 실행) 할 수 있습니다. 단, 모든 작업 대신 1 % 또는 0.01 %의 히트 만 사용할 수 있습니다. 사용률은 달라집니다. 페이지 조회수 및 작업 실행 횟수 따라서이 기능을 구현하려면 랜덤 라이저를 추가하기 만하면됩니다.

    다음과 같은 함수를 사용하면됩니다.

    if(rand (1, 100) <= 1) { // 1, 100 is used to generate a number between 1 and 100. 1 is for one percent.
        // Run the tasks system
    }
    

    희망이 도움이,

  10. ==============================

    10.www.guardiano.pm으로 cronjob을 아웃소싱하고 매 X 분마다 URL을 호출합니다. url (예 : www.yoursite.com/dothis.php)이 호출되면 일부 코드가 실행됩니다. 원할 때 웹이 페이지를 요청하도록하지 않으려면 POST에서만 요청을 허용하고 guardiano.pm으로 알고있는 매개 변수를 보내십시오

    www.guardiano.pm으로 cronjob을 아웃소싱하고 매 X 분마다 URL을 호출합니다. url (예 : www.yoursite.com/dothis.php)이 호출되면 일부 코드가 실행됩니다. 원할 때 웹이 페이지를 요청하도록하지 않으려면 POST에서만 요청을 허용하고 guardiano.pm으로 알고있는 매개 변수를 보내십시오

    그게 내 애완 동물 프로젝트에서 그렇게하기 때문에 내가 할 수있는 일. 재미있어!

  11. ==============================

    11.커맨드 라인 PHP + cron이 내가가는 길이다. 그것은 간단하며 청구서에 적합해야합니다. 물론 보통 PHP로 설치됩니다.

    커맨드 라인 PHP + cron이 내가가는 길이다. 그것은 간단하며 청구서에 적합해야합니다. 물론 보통 PHP로 설치됩니다.

  12. ==============================

    12.cronjob을 설정할 수있는 옵션이 없다면 cUrl을 사용하여 스크립트를 호출 할 수 있습니다 (동일한 기능인 wget 대신). cUrl 기능을 실행하는 로컬 시스템에서 예약 된 작업 만 수행하면됩니다.

    cronjob을 설정할 수있는 옵션이 없다면 cUrl을 사용하여 스크립트를 호출 할 수 있습니다 (동일한 기능인 wget 대신). cUrl 기능을 실행하는 로컬 시스템에서 예약 된 작업 만 수행하면됩니다.

  13. ==============================

    13.보다 추상적 인 것을 원한다면, PHP 스케줄러와 같은 것을 사용할 수도 있습니다. 예 :

    보다 추상적 인 것을 원한다면, PHP 스케줄러와 같은 것을 사용할 수도 있습니다. 예 :

    또한 cron 표현식을 구문 분석하려면 https://github.com/mtdowling/cron-expression과 같은 기존 라이브러리를 사용할 수 있습니다. cron 작업의 정보를 찾는 데 도움이되는 유용한 메소드를 많이 제공합니다.

    희망이 도움이됩니다.

  14. from https://stackoverflow.com/questions/120228/php-running-scheduled-jobs-cron-jobs by cc-by-sa and MIT license