2013-07-02 4 views
1

나는 Cron을 수행하는 PHP 사이트를 가지고 있습니다.이 사이트는 클라이언트 실행 중에 Cron 관리자 대신 트리거됩니다. 수행되는 Cron 중 하나는 실행하는 데 몇 초가 걸리고 완료 될 때까지 클라이언트와 서버 간의 연결을 유지합니다. 클라이언트가 실행되는 동안 대신 서버에서 해고 될 Cron을 설정할 수 있음을 알고 있지만이 형식을 따르지 않고 가능한지 알고 싶습니다.연결을 닫지 만 계속 처리합니다.

그래서 PHP 스크립트는 클라이언트와 서버 간의 연결을 종료하지만 (종료하지 않고) 계속 기능을 수행하기 위해 Apache (또는 호스트되는 서버)에 명령을 보낼 수 있습니까?

답변

4

이 (FastCGI를 함께 IIS에 분명히하지 않음) 아파치에서 작동

<?php 
ignore_user_abort(true); // make sure PHP doesn't stop when the connection closes 

// fire and forget - do lots of stuff so the connection actually closes 
header("Content-Length: 0"); 
header("Connection: Close"); 
flush(); 
session_write_close(); // if you have a session 

do_processing(); 
// don't forget to `set_time_limit` if your process takes a while 
+0

이상한 해결책이지만이 작업을 볼 수 있습니다. +1 –

+0

지금 시도하십시오. – topherg

+0

FastCGI가있는 IIS에서는 일반적으로 여러 인스턴스에 대해 동일한 인스턴스를 다시 사용하기 때문에 일반적으로 작동하지 않습니다. 하지만 그것은 아파치에서 잘 작동합니다. – CodeAngry

1
당신은 PHP 바이너리 ... 예를 호출하는 shell을 사용할 수 있습니다

:

shell("php -f /path/to/cronfile.php > /dev/null 2>/dev/null &"); 기다릴 실행되지 않습니다 돌아온다.

Asynchronous shell exec in PHP

-1

은 일반적으로 실행의 두 가지 형태가있다 참조하십시오.

클라이언트 측 : 클라이언트는 페이지에 남아 있고 페이지는 완료 될 때까지 주어진 명령을 계속 처리합니다. 양면

서버 : 데이터베이스에있는 스위치를 만들 & 클라이언트가있는 페이지로 이동합니다 다음 PendinCron 인 경우

UPDATE Table SET PendinCron=1 WHERE IdentiferCol=$IdentiferData 

는 그런 다음 cronjob에있을 것이다는 과정을 X 간격으로 실행하고 의지하고 그렇지 않은 경우 1과 같습니다. Cron은 필요한 작업을 실행하지 않습니다.

관련 문제