2012-04-19 2 views
5

설정 시간에 하루에 한 번 실행되는 Cron 작업을 설정하는 데 어려움을 겪고 있습니다. 여기 내 모듈의 설정에있는 내용은 다음과 같습니다 나는 cron 작업에 대해 알고있는, 즉 내 로컬 시간대에 따라 오후 5 실행해야Magento의 Cron은 근본적으로 결함이 있습니까?

<crontab> 
    <jobs> 
     <sorting_flushcache> 
      <schedule><cron_expr>0 16 * * *</cron_expr></schedule> 
      <run><model>sorting/observer::flushProductCacheCron</model></run> 
     </sorting_flushcache> 
    </jobs> 
</crontab> 

에서. 그러나 결코 작동하지 않습니다. cron_expr* 16 * * *으로 설정하면 전체 시간 동안 매분마다 작업을 예약합니다 (예상대로).

나는 코드를 통해 추적하고 내가 문제를 찾은 것 같아하지만 난 크론 일정에 대해 충분히 알지 못하고이 정말 그래서 나는 누군가가 나를 잘못 이해하는 데 도움 수있는 희망 어떻게 해요 작동하도록되어 방법 내 직업을 만들기 위해서.

Mage_Cron_Model_Schedule은 짐승의 두뇌입니다. cron.php 스크립트가 서버의 crontab 일정에 의해 호출되면이 클래스가 캐치하고 해당 작업을 처리하는 이벤트를 전달합니다. 무엇보다도 config에서 pull하고 다가오는 cron 작업을 계획하려고 시도합니다. 내부 public function trySchedule($time) 안에는 matchCronExpression이 호출되어 해당 cron 표현식 조각과 일치하는 현재 시간 값과 함께 해당 cron 표현식 조각이 전달됩니다. 예를 들어, cron_expr ( 부분)의 첫 번째 부분과 현재 시간 소인의 분을 비교합니다. cron_expr0 16 * * * 내입니다, 내 경우

return ($num>=$from) && ($num<=$to) && ($num%$mod===0); 

다음 matchCronExpression 함수의 끝에서 그것은 부울 값과 같이 반환합니다. 내 부분에 어떤 범위 나 */5 유형의 내용이 없기 때문에 내가 설정 한 정확한 값을 현재 타임 스탬프의 정확한 값과 비교합니다. 즉,이 작업을 예약해야하는 정확한 순간에 cron 스크립트를 실행 한 경우에만 true를 반환합니다.

다시 말하지만, 나는 cron 전문가는 아니지만 이것은 나에게 맞는 것 같지 않습니다. cron 스케줄러가 스크립트를 실행할 정확한 시간을 예측할 수 없다면 하루에 한 번씩 작업을 실행하도록 스케줄하는 방법은 무엇입니까? 나는 정말로 내가 뭔가를 놓치기를 바란다. .. 누군가 도울 수 있냐?

- CRON CONFIG 정보 -이 문제에 대한 "솔루션"을 발견 할 수 있습니다하지만이 가능한 영향이있을 수 있습니다 확실하지 않다

generate schedules every: 5 
schedule ahead for: 10 
missed if not run within: 20 
success history lifetime: 60 
failure history lifetime: 600 
+0

현지 시간대가 아닌 서버 시간대입니다. – hakre

+0

무엇이든지, 그것은 요점이 아닙니다. 내 게시물에서 언급했듯이, 만약 그것을 * 16 * * *으로 변경하면 그것은 작동합니다 .... 그래서 나는 그것이 내가 말한 시간대의 의미론이 아닙니다. 나는 단순히 작동하지 않습니다. – BrianVPS

+0

그래 보이지 않아. 그러나 내가 읽은 것은 자성의 코드 품질이 좋지 않다는 것입니다. 아마도 그냥 뭔가를 함께 밀어 shitbacked 출시를 밀어하고 빨리 섹시하게 보이게합니다. – hakre

답변

3

. 희망을 갖고 다른 사람이 더 나은 대답을 확인하거나 제공 할 수 있습니다. 이 트릭을 할 것으로 보인다

generate schedules every: 1 
schedule ahead for: 5 
missed if not run within: 20 
history cleanup every: 30 
success history lifetime: 60 
failure history lifetime: 600 

다음과 같이

나는 젠토 내 크론 구성을 변경했습니다. 이제는 매분마다 일정을 생성하므로 하루에 한 번씩 일정을 계획하는 창을 놓치지 않습니다.

이 문제에 대한 의견이 있으십니까? 나는 시스템이 매분 cron 스케쥴을 생성하는 것이 너무 어렵다고 우려하고 있습니다. 처리 할 수 ​​있어야하지만 확인을 위해 테스트를해야합니다.

다른 사용자와 비슷한 경험이 있습니까? 어떻게 그걸 해결 했니?

+0

글쎄,이 항목을 cron_schedule 테이블에 나타나기 시작했는데 내 코드가 제대로 실행되지 않습니다. cron에 의해 호출 된 내 모델의 메소드는 ** flushProductCacheCron **입니다. 실행 후 DB를 확인하고 처리가 필요한 항목을 처리했지만 캐시를 실제로 플러시하지 않은 것을 반영하도록 내 테이블을 업데이트했습니다. cron 작업에서 실행할 수있는 코드에는 제한이 있습니까? 테스트하려면 frontend 컨트롤러를 설정하여 cron이 호출하는 동일한 메소드를 호출하십시오. 해당 URL을로드하면 제대로 작동합니다. cron만이 문제가 있습니다. 무슨 일 이니? – BrianVPS

관련 문제