2016-11-09 11 views
0

내 PHP 프로젝트에서 몇 가지 백그라운드 작업이 있습니다. 어떤 조건이 만족되면 큰 소리로 일을합니다. 예를 들어, 아직 배달되지 않은 주문이 있고 배달 예상 시간이 15 분 미만인 경우 시스템에서 택배에게 늦었을 가능성을 알립니다.배경 PHP 작업, cron 대안

가장 간단한 해결책 - 매분 PHP 스크립트를 실행하는 cron 작업을 만듭니다. 이 스크립트는 조건을 확인하고 조건이 충족되면 알림을 보냅니다.

또 다른 접근법은 대기열입니다. 나는 gearman과 rabbitmq를 보았지만, 나는 그들이 다른 유스 케이스에 대해 볼 수있는 것처럼 보았다. 작업을 직접 보내는 클라이언트가 있으면 적합합니다. 내 경우에는 클라이언트가 없으며 시스템에 조건이 있습니다.

그리고 내가 생각한 마지막 해결책은 무한 루프로 사용자 정의 PHP 데몬을 작성하는 것입니다. 각 반복에서 상태를 확인하고, 만족하고 1 분 동안 잠자기하면 작업을 수행하십시오. 하지만 메모리 누수, 데몬 재시작 등과 같은 문제가있을 수 있습니다.

그래서이 현대판 PHP의 가장 좋은 해결책은 무엇입니까?

+0

PHP 솔루션을 찾으려면 정상적인 cron 작업을 수행하십시오. 다른 방법으로는 예약 된 작업을 설정할 수있는 제 3 자 옵션이있을 수 있으며 해당 작업에서 응용 프로그램을 호출 할 수 있습니다. 또는 노드 J와 같이 측면에서 실행되는 작은 대기열 응용 프로그램을 만들면됩니다. – KungWaz

답변

0

cron이 작업을 수행 할 수 있다면 반드시 사용하십시오. 왜 일을하는 입증 된 도구가있을 때 바퀴를 재발 명합니까? 나는 약간의 글자를 썼다.

while (1) { 
// run forever scripts 
} 

. 그들은 단순한 mysql 테이블 인 메시지 큐를 처리했다. 하지만 그렇게한다면, while (1) 프로세스 상태를 검사하는 cron 작업이 필요합니다. 프로세스가 여러 번 시작되는 것을 막기 위해 잠금이 필요합니다. cron을 사용하십시오.

+0

나는 두 번째로, cron에 간다. –

0

cronjob을 사용하고 싶지 않다면 최선의 선택은 데몬을 작성하는 것입니다. 내가 Perl로 코딩하는 것을 좋아한다. 내가 너라면 Perl에 데몬을 쓸 것이다.

그러나 PHP에서 데몬을 작성하는 경우 cronjob (예 : 10 분 간격)에 다른 백업 스크립트를 실행하여 PHP 데몬이 실행 중인지 확인하고 실행하지 않을 경우 데몬을 다시 시작합니다.