| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | <?phpnamespace KIF\Core;use KIF\Cli\SingleProcess;abstract class AbstractDaemon extends Controller {		public function run() {		$action = $this->action;		$this->$action();	}		/**	 * 	 * 要完成的业务逻辑,由子类实现	 */	abstract protected function doSomething();		/**	 * 	 * 脚本存活时间,可由子类重写	 * @var int	 */	protected $aliveTime = 7200;// 2小时			/**	 * 	 * Enter description here ...	 * @var KIF\Cli\SingleProcess	 */	private $objSingleProcess;		public function __construct() {		$processId = realpath(__FILE__) . '-' . get_class($this);				$timeout = 2 * $this->aliveTime;// 允许外部脚本kill当前脚本的时间,设置为存活时间的2倍。确保存活时间内,脚本不会被意外杀死。		$this->objSingleProcess = new SingleProcess($processId, $timeout, true);			}		/**	 *	 * 判断脚本是否还能存活	 * @return Boolean	 */	protected function isAlive() {		static $time_init = null;		if (is_null($time_init)) {			$time_init = time();		}			$time_now = time();		    if ($time_now - $time_init >= $this->aliveTime) {//超过脚本的生存时间	        return false;	    }		    return true;	}			protected function doDefault() {		if ($this->objSingleProcess->isRun()) {		    echo "已经有进程在跑了\r\n";		    exit();		}		$this->objSingleProcess->run();				do {			if (!$this->isAlive()) {	    		break;	    	}	    		    	$this->doSomething();	    		    							usleep(1000000);			echo "休息...\r\n";		} while ( true );				$this->objSingleProcess->complete();		echo "done\r\n";		exit ();	}	}
 |