2013-04-10 1 views
0

매분마다 실행되는 cron 작업이 있고 62 초 동안 첫 번째 반복이 실행되면 첫 번째 발생이 끝날 때까지 두 번째 반복이 시작될 것입니까? 아니면 동일한 cron 작업이 동시에 실행될 수 있습니까? PHP : cron (또는 다른 방법)을 사용하여 매 초마다 PHP 스크립트를 실행하는 방법?

볼, 시나리오 1이 문제를 설명하기 위해 :

|0 |60 |120 |180 |240 |300 
------ Cron Job 1 Taking 60 Seconds 
     --------- Cron Job 2 Taking 90 Seconds 
       XXX-------Cron Job 3 waiting til the next 1 minute interval starts 

내 관심은 30 기간이있을 것입니다 :

|0 |60 |120 |180 |240 |300 
------ Cron Job 1 Taking 60 Seconds 
     --------- Cron Job 2 Taking 90 Seconds 
      ------ Cron Job 3 Taking 90 Seconds but overlapping with the previous cron job 

인가 일, 또는 의지 시나리오 2는 무슨 일이 일어날 지 위 XXX로 표시된 초는 크론 작업이 실행되지 않을 것입니다.

달성하려는 목표는 무엇입니까? PHP 스크립트를 매 초마다 무한정 실행하고 싶습니다. 1 초에 한 번씩 실행할 필요는 없지만 RUN, END, RUN, END, RUN, END를 실행해야합니다. 반복 작업에 5 초가 걸리면 첫 번째 작업이 종료 된 후 다음 작업 만 시작해야합니다. 그러나 결코 멈추지 않아야합니다. 문제는 반복의 길이를 결정할 수 없다는 것입니다. 하나의 반복에는 1 초가 걸리거나 5 초가 걸릴 수 있습니다.

  1. 수 있습니까? 스크립트가 매 순간마다 실행된다는 사실을 내가 알 수 있도록하기 위해?
  2. 그렇지 않다면 PHP 스크립트가 무한정 실행되는 것을 어떻게 방지 할 수 있습니까?

답변

0

다른 인스턴스에 관계없이 두 번째 프로세스가 시작됩니다. 스크립트에서 이미 실행중인 다른 프로세스 (예 : 글로벌 PID 파일이있는 경우)를 확인하거나 정확히 필요한 항목에 따라 달라질 수 있습니다.

1

예. cron은 작업을 시작하지만 이전에 시작되었는지 확인하지 않습니다. 작업 대기열을 관리하지 않습니다.

0

첫 번째 발생이 종료 될 때까지 두 번째 반복이 시작됩니까?

대부분의 Unixes에서 기본값 인 Vixie cron을 사용하면 대답은 "예"입니다.

PHP 스크립트를 실행하는 Linux 시스템에서 초당 실제 간격을 어떻게 얻을 수 있습니까?

질문이 이상합니다. 다시 입력하십시오. 그러나 동시에 실행되는 각 스크립트의 단일 인스턴스를 원하면/usr/bin/flock 또는 다른 뮤텍스 도구를 사용하십시오.

+0

질문을 업데이트했습니다. – coderama

2

다음과 같이 간단한 잠금 메커니즘을 구현할 수 있습니다. 대신 크론를 사용하여, 당신은 당신의 스크립트 "daemonizing"로

if(!locked()) { 
    lock(); 
    // your code here 
    unlock(); 
} else { 
    echo "script already running"; 
} 

function lock() { file_put_contents("write.lock", 'running'); } 
function locked() { return file_exists("write.lock"); } 
function unlock() { return unlink("write.lock"); } 
0

보일 수 있습니다 : 당신이 다음 간단한 작업/작업/작업자 큐 및 사용을 구축 할 필요가 같은 PEAR System Daemon

거기에서, 그것은 보인다 그에 따라 디스패치하고 잠그는 데몬.

관련 문제