2009-10-20 7 views
0

URL을 열어 내 서버에서 스크립트를 호출하고 싶습니다. 스크립트는 실행하는 데 오랜 시간이 걸리므로 백그라운드에서 실행하고 싶기 때문에 브라우저를 열어 두거나 시간 제한에 대해 걱정할 필요가 없습니다.php system() 명령을 통해 여러 시스템 명령을 백그라운드에서 실행 하시겠습니까?

PHP 함수 system()이 작동해야하는 것처럼 보입니다.하지만 작동하지 않습니다.

모든 상대 경로가 올바른지 확인하려면 스크립트를 올바른 디렉터리에서 실행해야합니다. 다음은 실행하고자하는 시스템 명령입니다.

cd /path/to/script/directory/;php my_php_script & 

그리고 이것은 제가 아무런 노력을 기울이지 않은 최신 것입니다.

system('(cd /path/to/script/directory/;php my_php_script & > /dev/null)'); 

누구나이 방법을 알고 계십니까?

+0

오, 내가 낮은 우선 순위에서 프로세스를 실행할 수 있다면 멋질 것입니다. – user77413

답변

2

Linux와 같은 유닉스 계열의 시스템에서 이것은 매우 쉽습니다. Nohup은 시작해야하는 명령이며 다음 명령이 계속 실행됩니다. 스크립트가 종료되거나 사용자가 로그 아웃하면 명령이 실행됩니다. 이 명령은 명령과 매우 유사하지만 쉽게 읽을 수 있습니다.

system("nohup php /path/to/script/directory/my_php_script > /dev/null &"); 

PHP의 가비지 컬렉터는 메모리 누수가 발생하기 쉽고 간단한 스크립트는 하루 만에 기가 바이트 메모리를 소모 할 수 있습니다. 몇 시간 또는 몇 분 안에 종료되는 cron 작업으로 실행되도록 PHP 스크립트를 예약하면 메모리를 확보 할 수 있습니다.

+0

이것은 나를 위해 작동하지 않습니다. 먼저, 스크립트가 잘못된 디렉토리에서 실행되기 때문에 스크립트 내부에 상대 경로가 포함됩니다. 그래서 내 버전에서 "cd"문을 가지고 있습니다. 둘째, 내가 명령 줄에서 해당 명령을 실행할 때, 나는 다음과 같은 얻을 : nohup을 : 또한 을 stdout에 무시 입력 및 리디렉션 표준 오류, 왜 나는 nohup을의 Section 명령이 필요합니까? 그것은 마치 사용자가 로그 아웃 한 후에 백그라운드 프로세스를 계속 실행하는 것처럼 보입니다. 아파치 사용자가 로그 아웃하지 않기 때문에 필요한가요? – user77413

관련 문제