2010-03-11 13 views
2

MySQL 데이터베이스에 시간을 기록한 데이터베이스가 있습니다. 1000 개 이상의 항목이 있습니다. 그 시간에 정확하게 시간을 추출하고 PHP 스크립트를 실행하고 싶습니다.PHP 스크립트를 연속적으로 실행하십시오.

PHP 스크립트를 지속적으로 실행하려고 시도했지만 서버가 60 초 이상 스크립트를 실행할 수 없습니다.

EDIT. 매초마다 데이터베이스를 확인해야합니다. 어떤 대안이 있습니까?

+0

어떻게 cron 작업을 통해 스크립트를 실행하는 방법에 대한 그러나, 저자는 이제 우분투에서 쉽게 사용할 수 새 기능을 사용하는 것이 좋습니다? – jamieb

+0

크론 작업은 좋은 생각이지만 너무 많은 시간이 걸리는 데이터베이스와 현재 시간에서 시간을 확인하기 위해 쿼리를 실행해야합니다. 그렇게 할 대안이 있습니까? – nicky

+0

set_time_limit (0)을 사용할 수 있습니다. 귀하의 PHP 스크립트가 "영원히"실행되도록 약 1 일 후에 스크립트는 1GB 이상의 메모리를 사용하게됩니다. PHP의 메모리 관리자는 매우 원시적입니다. 오랜 시간 동안 1 프로세스를 실행하려면 Java를 사용하거나 C++을 작성해야합니다. – rook

답변

3

유닉스의 cron을 사용해보십시오.

3

스크립트를 실행하려면 외부 서비스가 필요합니다. 유닉스 박스에서는 cron이 될 것입니다. Windows 상자에서 Task Scheduler을 사용하십시오.

1

프로세스를 서버 데몬으로 작성하는 것에 대해 생각해 보셨습니까? 그것은 시작되고 while 루프에서 영원히 돌아갈 것입니다. 몇 분마다 또는 종종 다음 번 실행 시간을 확인할 수 있습니다. 요청을 큐에 넣고 그 시간이 다가올 때마다 실행해야하는 스크립트를 시작합니다. 나는 cron이 당신이 임의의 시간에 미래의 이벤트를 스케쥴하려고 할 때부터 당신이 원하는 것을 생각하지 않는다 ... 그리고 나는 그것이 매초마다 db를 확인하고 시도하기 위해 현재 사용하고있는 것이라고 확신한다.

+0

예. 매초마다 DB를 확인해야합니다. 다른 해결책이 있습니다. 왜냐하면 반복적으로 질의하는 것은 매우 번거롭기 때문입니다. – nicky

+0

다음 X 분 이내에 실행해야 할 때마다 X 분마다 확인하십시오. 그래서 뭔가가 다음과 같습니다 : 시간을 선택하십시오. 시간

0

당신은 계속 다음 주어진 시간의 PHP 스크립트를 일시 중지하고 sleep(arg) 기능을 사용해야합니다.

sleep(50); //Pauses 

myFunction(); //Runs after the pause 

예를 들어, 스크립트를 50 초 동안 일시 중지합니다.

+0

이 해결책은'max_execution_time' 매개 변수가 매우 높은 값 (절대 최대 값이 무엇인지 모르겠습니다)과'set_time_limit()'함수 및 가능하면 다른 변수로 설정된 경우에만 작동합니다. 예를 들어 스크립트를 1 주일 또는 1 달 동안 실행하고 싶다면 효율적인 솔루션은 아니지만 짧은 실행 시간에 매우 지연된 루프에서 작동 할 수 있습니다 –

0

실행중인 프로세스를 유지 원하는 시간

0

에서 실행되는 스크립트를 만들기 위해 데이터베이스에서 읽고의 crontab에 항목을 추가하는 PHP 스크립트를 작성하면해야하지 적어도 때문에, 매우 좋은 해결책이 아니다 계속해서 작동하는지 확인하십시오. 아마도 다음 번에 일어날 때를 알 수 있습니다. 'atd'를 사용하여 일정을 잡으십시오. 트리거 될 때 스크립트는 다음 작업을 예약 할시기와 방법을 사용해야합니다. 하나의 실패가 체인도 ATD의 대부분의 구현의 단위 오히려 높을 수있다 나누기 -

이 작업이 연쇄되는 것을 의미한다.

당신은 Nagios를 같은보다 정교한 예약 도구 또는 DJB의 데몬 툴즈 나 오라클의 OPMN 같은 프로세스 모니터링 유형의 접근법을 사용하여보고 할 수 있습니다

.

C.

0

System_Daemon

DJB의 데몬 툴즈는 중대하다. 그래서 Remnant가 진정한 변덕쟁이 역할을하지만 Systemd 및/또는 Upstart입니다.

관련 문제