2013-03-06 2 views
0

내가 PHP를 사용하고 예정하고있는PHP 및 Windows 작업

"C:\PHP\php.exe" "C:\inetpub\wwwroot\cron\run-me.php" 

같은이 파일을 박쥐 실행하도록 예약 된 작업을 일부 Windows를 설정했습니다. 이것들은 모두 훌륭하게 작동하며 매 30 분마다 실행하는 작업을 설정했습니다. 'run-me.php'파일에는 레코드의 종료 날짜를 확인하는 스크립트가 포함되어 있으며 종료 날짜가 현재보다 작 으면 만료됩니다 (이메일 전송과 같은 스크립트에 더 많은 기능이 있음). 다시 말하지만, 그들은 모두 훌륭하게 작동합니다.

스크립트는 30 분마다 실행되기 때문에 방문자가 사이트에있을 때 스크립트가 실행되기를 원하기 때문에 기본적으로 각 페이지로드시 종료 항목 확인, 만료, 모든 레코드 유지 최신 정보. Windows 작업에서 실행하는 이유는 몇 시간 동안 방문자가 없기 때문에 기록을 만료하고 전자 메일을 보내야하기 때문입니다.

이제는 Windows 작업이 실행 중이고 방문자가 페이지를 다시로드하는 경우 동일한 내용의 이중 이메일을 자주 받기 때문에 실행중인 이중 스크립트가 발생하는 문제가 있습니다.

내 Windows 작업은 단일 인스턴스 만 실행하도록 허용하며 5 분 이상 실행하면 강제로 중지됩니다.

내 질문은 다음과 같은 스크립트의 인스턴스가 하나만 실행되도록

  1. 내가 내 PHP 스크립트에서 Windows 예약 작업을 실행 할 수 있습니까?
  2. DB 용 MySQL을 사용하고 있습니다. 행을 잠그면 아무 것도 수행 할 수 없으므로 레코드에 대한 첫 번째 액세스를 실행하는 스크립트가 허용됩니다.
+0

flock() 파일 사용 –

답변

0

트랜잭션을 사용하면 트릭을 수행해야합니다. 그러나 5 분마다 실행 되더라도 cron (또는 Windows의 스케줄러)에서만이 작업을 수행하는 것이 좋습니다.

+0

안녕하십니까. 이것은 사용자가 시작한 스크립트를 제거하고 스케줄러에서 만료 검사를 실행한다는 의미입니까? 이것은 또한 end_date> NOW 또는 뭔가 올바른 것을 추가하지 않으면 만료 된 레코드가 사이트에서 볼 수있는 5 분의 창이 있다는 것을 의미합니까? 추가 구성에 대해 너무 많이 알지 못하면 매 2 분마다 스크립트를 실행하는 데 너무 많은 오버 헤드가 발생합니까? – puks1978

+0

2 분마다 실행하면 많은 양의 데이터를 처리하지 않는 한 찾아야합니다. 만료 된 제품이 한 번 밖에없는 경우에는 괜찮을 것입니다. 또한 한 번 만료되도록 필터를 설정했기 때문에 작업해야하는 레코드는 항상 제한되어 있으므로 잘되어야합니다. – xelber

+0

감사합니다. 가야 할 길 같은데. – puks1978