2014-11-24 6 views
0
ps ax | grep -i 'php complete.php' 

<?php 
exec("ps ax | grep -i 'php complete.php'", $pids); 
if(!empty($pids)) { 
die("already running"); 
} 

내 ps ax를 확인하려고했지만 complete.php를 보지 않았습니다. complete.php가 실행 중이면 아무 것도 출력하지 않는 폴더를 확인했습니다. .PHP 스크립트가 실행 중인지 확인

거짓 양성을 나타냅니다. complete.php 스크립트가 현재 실행 중인지 확인하려면 어떻게합니까?

이유는 동기식으로 실행하기를 원하기 때문입니다. 그리고 2 분마다 complete.php를 실행하여 무한 루프가 cron 작업처럼 작동하기 때문입니다.

+0

'그렙 -i PHP는 complete.php'는 가양를 창조하는 PROCESSLIST에있을 것입니다. 빠르고 & 더러운 해결책은'grep -i php [c] omplete.php'이다. (당신이 선택한 한 글자 주위에'[]'를 추가하면된다.)하지만,보다 견고한 해결책은 보통 pid 파일과 같은 것으로 작업한다. 그것을 실행하고 계속 실행하고 싶다면,'감독자 (supervisor) '와 같은 것을 사용하면 시스템을 계속 유지할 수 있습니다. 그렇지 않으면 시스템이 sysvinit/systemd/upstart 등을 사용하는지 여부에 달려 있습니다. 최선의 행동 방침은 무엇입니까? – Wrikken

+0

PHP에서'exec ('ps ax', $ o); print_r ($ o); 리턴이 무엇인지 확인하십시오. 줄이 끊어 졌습니까? –

답변

0

PHP 프로세스 만 실행 중입니다. 실행중인 PHP 프로세스를 보는 나의 접근 방식은 PHP 바이너리의 별명을 지정하고 실행하는 것입니다.

에선 -s는/usr/빈/PHP는 longrunningphp

longrunningphp/경로 /로는/당신의/스크립트

그런 다음 PS 도끼 확인 | grep longrunningphp

0

I had the same problem. 콘솔에서 실행하면 결과가 표시되지만 동일한 명령이 PHP에서 사용되면 아무 것도 반환되지 않습니다. 문제는 PHP에서 허용되는 터미널 너비 어딘가에 있습니다. 간단한 해결책은 그것을 증가시키는 것입니다. 예 :

exec("export COLUMNS=1000; ps ax | grep -i 'php complete.php'", $pids); 
COLUMNS 
    Used by the select command to determine the terminal width when printing 
    selection lists. Automatically set upon receipt of a SIGWINCH. 
관련 문제