12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- namespace 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 ();
- }
-
- }
|