PHP는 또한 데몬 프로세스를 직접 시작하고 종료 할 수 있습니다. 쉘과 비교할 때 이해하기가 훨씬 간단하고 편리합니다. 물론, PHP 데몬이 자동으로 다시 시작 해야하는 경우 여전히 쉘의 크론 타브 일정에 따라 다릅니다. 스크립트를 다시 시작하여 스크립트를 다시 시작 해야하는지 확인하십시오. 필요한 경우 프로세스를 죽이고 Runfile 파일을 삭제하고 Runfile 파일에 PID를 다시 시작하고 작성하십시오.
코드 사본은 다음과 같습니다.
<? php
함수 시작 ($ 파일) {
$ path = dirname (__ 파일 __). '/';
$ runfile = $ path. $ 파일. '. run';
$ diefile = $ path. $ 파일. '. 다이';
$ file = $ path. "data/{$ file} .php";
ClearStatCache ();
if (file_exists ($ runfile)) {
$ oldpid = file_get_contents ($ runfile);
$ nowpid = shell_exec ( "ps aux | grep 'php -f process.php'| grep $ {oldpid} | awk '{print $ 2}'");
// Runfile의 PID 번호가 실행 중인지와 일치 할 수 있고 마지막으로 RunFile에 액세스 할 때와 현재 차이가 5 분 미만인 다음 반환의 차이가있는 경우
if (($ OldPid == $ nowpid) && (time () -fileatime ($ runfile) <300)) {
echo "$ 파일은 원 no";
반품;
}또 다른{
// PID 번호가 일치하지 않거나 루프 명령문이 300 초 동안 실행되지 않았습니다. 프로세스를 죽이고 다시 시작하십시오
$ pid = file_get_contents ($ runfile);
shell_exec ( "ps aux | grep 'php -f process.php'| grep {$ pid} | xargs-if-no-run-empty kill");
}
}또 다른{
// 파일 PID를 실행 파일에 쓰십시오
if (!
반품;
}
while (true) {
// 새 종료 프로세스 번호를 받고 프로세스를 종료 한 후 관련 파일을 삭제합니다.
if (file_exists ($ diefile) && unlink ($ runfile) && unlink ($ diefile)) {
반품;
}
/*이것은 데몬이해야 할 일입니다*/
file_put_contents ($ file, "지금 실행 중입니다".php_eol, file_append);
/**********************/
터치 ($ runfile);
수면 (5);
}
}
}
시작 ( "테스트");
HP로 데몬을 쓸 때주의를 기울여야 할 사항 :
1. 첫 번째는 CLEARSTATCACHE () 함수 함수입니다. 공식 설명서를 살펴보면 함수가 파일 상태 캐시를 지우는 것을 알 수 있습니다. 스크립트에서 동일한 파일의 캐시 상태를 여러 번 확인하면 함수가 사용되지 않으면 오류가 발생합니다. 영향을받는 함수는 다음과 같습니다. stat (), lstat (), file_exists (), is_writable (), is_readable (), is_executable (), is_file (), is_dir (), is_link (), fileatime (), filemtime (), fileInode (), filetyper (), filewange (),) 파일링 ().
2. 스크립트가 여러 번 실행되면 실행하기 전에 감지됩니다. 마지막 루프의 시간 거리는 이제 300S보다 크거나 PID 번호가 일치하지 않으면 다시 시작됩니다 (각 루프 실행에서 시간을 업데이트해야 함).
3. 자동 재시작은 Crontab의 일정을 사용하여 일정에 파일을 추가합니다.
코드 사본은 다음과 같습니다.
Crontab -e
#일정, 삽입 모드를 올립니다
*/3 * * * */usr/bin/php -f process.php
#3 분마다 execute를 사용하여 프로세스를 매달아야합니다
이것은 기본적으로 괜찮습니다. 특정 기능이있는 경우 코드를 변경해야합니다.