2011-01-17 8 views
8

들어오는 소켓 요청 등을 수신하는 PHP 스크립트가 있습니다.이 스크립트를 서버에서 계속 실행해야합니다 (무한 루프 내에서 실행 됨).영구 PHP 스크립트를 계속 실행하는 방법은 무엇입니까?

이 프로세스를 어떻게 시작하고 관리 할 수 ​​있습니까? SSH/퍼티를 통해 시작했지만 SSH 연결 시간이 지나면 스크립트가 종료됩니다.

+4

[복제 데몬 프로세스로 PHP 스크립트 실행] 가능한 복제본 (http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process) –

+2

좋은 정보가 많이 있습니다. http : // stackoverflow .com/search?q = php + daemon –

+1

ssh에서 세션을 분리하고 나중에 원할 경우 다시 연결하는 "화면"유틸리티도 확인하십시오 – regilero

답변

6
myscript.php & 

이것은 당신이 아래 코멘트에 언급했다

ps aux | grep myscript.php 

Patrick으로 그것을 확인할 수 있습니다 배경

를 scriptin 실행, 아니 최대 실행 시간이 없다 명령 행. myscript.php이 무기한 실행됩니다. 당신은 우리는 최근에 비슷한 필요를했다 ignore_user_abort()set_time_limit()

+0

당신은'set_time_limit'으로 그것을 무시할 수 있습니다. –

+4

명령 줄에서 실행할 때 시간 제한이 없습니다 – Patrick

+0

@ 패트릭 잘 알고 있습니다! – ActionOwl

2

여기에 설명 된대로 SSH를 통해 백그라운드에서 스크립트를 실행 Getting ssh to execute a command in the background on target machine

나는 것 다음 스크립트가 여전히 실행되고 있는지 모니터링 할 수있는 방법을 제안한다. 스크립트가 포트에서 수신 대기한다고 말한 경우 포트가 아직 열려 있는지 잠시 확인하는 스크립트를 작성할 수 있습니다.

또 다른 옵션은 프로세스 ID를 모니터링하는 것입니다. 스크립트가 처음 실행될 때 getmypid 함수를 사용하여 프로세스 ID를 가져 와서 파일에 저장할 수 있습니다. ps -p 1234을 사용하여 계속 실행 중인지 정기적으로 확인할 수 있습니다.

또 다른 해결책 : How to check if a php script is still running

-1

왜 루프 동안 할 일? 뭔가 스크립트의 정지를 트리거하는 일이 그런

do { /* your code */ } while $something == 0;는 0

+1

나는' $ something = 0;'은 과제이고 true/false 테스트는 아닙니다 ..) 하지만 당신도 알고 있었을 것입니다. 또 하나는 루프 시나리오에서 어떤 것을 기반으로한다면 로직 (스크립트/함수 ... 뭐든간에) 블록은 '유휴'가 유휴 상태가되지 않지만 서버 전체 또는 적어도 가상 서버 범위에서 소중한 리소스를 낭비하는 서버 CPU를 부담시킵니다. – Tore

0

이외의 값으로 당신은 그것을 명령 줄을 실행할 수에 $ 뭔가를 설정합니다. 시스템이 스크립트가 완료 될 때까지 기다리지 않도록하기 위해 "백그라운드에서 실행"수정자를 추가해야합니다. 기본적으로 명령 줄 끝에 &을 넣습니다.

확실히해야 할 것은 부팅 할 때 PHP 스크립트를 실행하는 ini 셸 스크립트를 만드는 것입니다. PHP 스크립트에서 실행을 위해

2

당신은 브라우저를 사용할 수 있습니다. Ubuntu 14.04 LTS 서버를 실행 중이므로 부팅시 프로세스를 시작하기위한 upstart 프로세스가 생성되고 어떤 이유로 든 종료되면 다시 시작됩니다.

자동 재시작을 포함하여 매우 잘 해결되었습니다. 우리의 장기 실행 프로세스는 결국 MySQL 연결을 잃게됩니다. 스크립트는 예외를 처리하고 종료하여 upstart 프로세스가 자동으로 프로세스를 다시 시작합니다. 또한 upstart이 다시 시작하는 것을 포기하는 더 큰 오류가있는 경우를 대비하여 cron 스크립트를 추가하여 프로세스를 모니터링합니다. 간단한 재시작으로 이전 오류가 수정되지 않는 경우에 대비해 페일 세이프가 있습니다.

관련 문제