2016-09-22 9 views
2

URL에서 몇 개의 매개 변수를 취한 다음 exec 명령을 실행합니다.이 명령은 exec 결과를 기다리고 싶습니다. 이 exec 명령은 완료하는 데 약 20-30 초가 걸립니다. 그것은 웹 페이지가 단지 nginx 502 나쁜 게이트웨이 오류 (시간 초과)를 가져 오기 때문에 결코 완료되지 않습니다. 그 긴 연결을 기다리는 나쁜 연습으로 nginx 시간 초과 오류를 연장하는 대신, 어떻게 내가 뒤에있는 PHP의 임원을 실행할 수 있습니다 그런 다음 페이지가 완성 된 후 페이지에 돌아 왔습니까? PHP를 사용하지 않고이 작업을 수행하는 더 좋은 방법이 있습니까?PHP는 exec가 끝날 때까지 기다렸다가 결과를 출력합니다.

+0

당신은 nginx에게이 특정 스크립트가 오래 실행된다는 것을 말해야 할 것이므로 시간이 초과되지는 않습니다. –

+0

더 자세한 내용과 예를 들어주세요. 내 초기 생각은 웹 페이지 디스플레이에 대한 크론 작업과 캐시가 필요하다는 것입니다. – Machavity

+0

@MarcB 어떻게 nginx를 사용하여이 스크립트를 선택하고 타임 아웃하지 말라고 할 수 있습니까? 나는 nginx 및 php-fpm confs에서 다양한 설정을 시도했지만 성공하지 못했습니다. – pete

답변

1

PHP가 백그라운드에서 실행되도록 분기 된 스크립트에 exec를 실행하도록하십시오 (&으로 끝남). 페이지는 원래 스크립트의 상태를 확인하기 위해 ajax 요청을 통해 주기적으로 서버를 폴링하는 일부 j를 반환해야합니다. 폴링 스크립트가 상태를 확인할 수 있도록 스크립트는 STDOUT 및 STDERR을 고유 한 파일로 출력해야합니다.

편집 : 당신이 알 필요가있는 경우 스크립트의 종료 코드가 다른 스크립트에서 포장 : ./wrapper.sh someIdUniqueToClient & 같은

#/bin/bash 
uniqId=$1 
yourscript $uniqId & 
myPid=$! 
echo $myPid > $uniqId'.pid' 
wait $myPid 
echo $? > $uniqId'.returned' 

전화. 시험받지 못했지만, 당신은 요지를 얻었습니다.

+0

전에 비슷한 작업을 완료했습니다. 정답입니다. –

관련 문제