<?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;
}
}
}