2009-06-17 4 views
2

을 사용하여 PHP로 작성된 데몬이 얼마나 실현 가능합니까? 나는 데몬을 몰래 사용하고 있으며 (메모리 및 CPU 사용 및 안정성 측면에서) 얼마나 유용하다고 생각하십니까? PHP :ignore_user abort 및 set_time_limit (0)

<?php 
// Ignore user aborts and allow the script 
// to run forever 
ignore_user_abort(true); 
set_time_limit(0); 

$fp = fopen('loop.log', 'w'); 
fwrite($fp, date('Y-m-d H:i:s') . ' Started' . PHP_EOL); 
while(1) { 
    fwrite($fp, date('Y-m-d H:i:s') . ' Looped' . PHP_EOL); 
    if (file_exists('loop.stop')) { 
     break; 
    } 
    // Sleep for 100 seconds 
    sleep(100); 
} 
fwrite($fp, date('Y-m-d H:i:s') . ' Stopped' . PHP_EOL); 
fclose($fp); 

(ignore_user_abort의 PHP 설명서에서 적응)이 간단한 예는 컨테이너 스크립트입니다. 실제 기능은 while 루프 안에 있습니다.

나는 지금이 랩톱에서 7 시간 동안 스크립트를 실행하고 있는데, 괜찮아 보이지만 많이하지 않습니다. 다른 사람이 이것을 시도 했습니까?

답변

3

나는 모든 PHP 리소스를 정기적으로 정리할 수 있도록 BASH 스크립트에 루프를 넣는 경향이 있습니다.

#!/bin/bash 
clear 
date 

php -f doChecksAndAct.php 
sleep 100 
# rerun myself 
exec $0 

것은 당신이 PHP 스크립트의 모든 특히 무거운 - 투 - 설정 작업을 수행한다면, 당신은 또한 거기에 작은 (분에) 루프를 넣을 수 있습니다 (예를 들어 50 ~ 100 반복, 그들은 여러 초 일시 중지되지 않은 경우 실행 사이의 총 오버 헤드 시간을 줄입니다.

추가 : 당신이 PHP 스크립트에서 아주 쉽게 루프, 다음 종료 즉시 다시 시작하거나, 잠시 동안 일시 정지 할 수 있도록 내가 배쉬/PHP (또는 다른 언어) 쌍에 블로그에 한-Doing the work elsewhere -- Sidebar running the worker합니다.

1

나는 그것을 추천한다.

4 년 전 열린 Memory allocated for objects created in object methods is not released이라는 버그가 있습니다.

devs는 이것을 기능 요청으로 생각하지만 장시간 실행되는 프로세스를 사용할 때는 해결하기가 매우 어렵습니다. 나는 시도했지만 응용 프로그램을 은퇴 할 수 있었을 때 매우 안심했습니다.