<?php use Workerman\Worker; use think\App; $worker_obj = new Worker(); $worker_obj->count = 1;// 慢任务,消费者的进程数可以开多一些 $worker_obj->name = 'FileMonitor'; $worker_obj->reloadable = false; //最后加载配置时间 $last_reload_time = time(); //监控文件目录 //$monitor_dir = realpath(__DIR__.'/../runtime/workerman'); $monitor_dir = realpath(__DIR__.'/../application'); //进程启动 $worker_obj->onWorkerStart = function($worker_obj) { App::initCommon(); global $monitor_dir; \Workerman\Lib\Timer::add( 5, 'check_files_change', array($monitor_dir) ); }; //监控函数 function check_files_change($monitor_dir){ global $last_reload_time; //获取监控目录下的所有文件 $dir_iterator = new RecursiveDirectoryIterator($monitor_dir); $iterator = new RecursiveIteratorIterator($dir_iterator); foreach ($iterator as $file) { //只监控php文件,看需求定制 if(pathinfo($file, PATHINFO_EXTENSION) != 'php') { continue; } //检查文件更新时间 if($last_reload_time < $file->getMTime()) { echo $file."\n\r"; echo "file update time : ".$file->getMTime()."\n\r"; echo "update and reload...\n\r"; // send SIGUSR1 signal to master process for reload posix_kill(posix_getppid(), SIGUSR1); //$last_reload_time = $file->getMTime();//文件更新时间,如果使用这个,那么每个文件更新都会重新加载workerman,没必要 $last_reload_time = time(); break; } } }