123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <?php
- defined('ONLY_ONLY_ONLY') or exit('Access Denied');
- function myecho($content){
- echo date("Y-m-d H:i:s")." ".$content."\r\n";
- }
- define('WEB_PHY_ROOT', str_replace("\\",'/', dirname(dirname(__FILE__))));
- function service_init($WsAjaxPrj,$taskname,$interval,$runfunc){
- try{
- //php 允许模式 cli 命令行模式/ fpm-fcgi web模式用于跟踪测试
- $php_runmode = php_sapi_name();
- $php_is_climode=(php_sapi_name()=="cli");
- $nowProcessGuid=time();//本次处理标识
- echo "\r\n";
- echo date("Y-m-d H:i:s")." ###{$taskname}进程开始### proc_id={$nowProcessGuid} proc_start ---->\r\n";
- if(1){
- /****基本环境初始化*******start**/
- include_once WEB_PHY_ROOT."/base/const.php";
- require WEB_PHY_ROOT.'/exception2log.php';
- echo date("Y-m-d H:i:s")." ###环境初始化-引入异常处理功能集### proc_id={$nowProcessGuid} end ---->\r\n";
- include_once WEB_PHY_ROOT."/base/base.php";
- echo date("Y-m-d H:i:s")." ###环境初始化-引入基本函数库### proc_id={$nowProcessGuid} end ----->\r\n";
- include_once WEB_PHY_ROOT."/base/mysql.php";
- echo date("Y-m-d H:i:s")." ###环境初始化-引入mysql-DAC类### proc_id={$nowProcessGuid} end ----->\r\n";
- $prjRoot=WEB_PHY_ROOT."/prjcenter/prj$WsAjaxPrj";
- include_once $prjRoot."/base/entry.php";
- echo date("Y-m-d H:i:s")." ###环境初始化-引入项目entry### proc_id={$nowProcessGuid} end ----->\r\n";
- define('WEB_PHY_FILEROOT', $prjRoot.'/fileroot/uploads');
- define('WEB_URL_FILEROOT', "/prjcenter/prj$WsAjaxPrj".'/fileroot/uploads');
- echo date("Y-m-d H:i:s")." ###环境初始化-引入项目uploads目录位置### proc_id={$nowProcessGuid} end ----->\r\n";
- /****基本环境初始化******finish**/
- }
- if($php_is_climode){//cli模式下附加进程信号
- /****进程信号初始化***start**/
- echo date("Y-m-d H:i:s")." ###进程信号初始化### proc_id={$nowProcessGuid} start ---->\r\n";
- //信号ID和信号名称对应关系,没注释掉的信号都是可以通过pcntl_signal函数注册的
- $GLOBALS['G_SIG_MAP'] = array(
- // 1 => 'SIGHUP',
- // 2 => 'SIGINT',
- 3 => 'SIGQUIT',
- // 4 => 'SIGILL',
- // 5 => 'SIGTRAP',
- // 6 => 'SIGABRT',
- // 7 => 'SIGEMT',
- // 8 => 'SIGFPE',
- //9 => 'SIGKILL',
- // 10 => 'SIGBUS',
- // 11 => 'SIGSEGV',
- // 12 => 'SIGSYS',
- // 13 => 'SIGPIPE',
- // 14 => 'SIGALRM',
- 15 => 'SIGTERM',
- // 16 => 'SIGURG',
- //17 => 'SIGSTOP',
- // 18 => 'SIGTSTP',
- // 19 => 'SIGCONT',
- // 20 => 'SIGCHLD',
- // 21 => 'SIGTTIN',
- // 22 => 'SIGTTOU',
- // 23 => 'SIGIO',
- // 24 => 'SIGXCPU',
- // 25 => 'SIGXFSZ',
- // 26 => 'SIGVTALRM',
- // 27 => 'SIGPROF',
- // 28 => 'SIGWINCH',
- // 29 => 'SIGINFO',
- // 30 => 'SIGUSR1',
- // 31 => 'SIGUSR2',
- );
- //信号处理器逻辑,主要用于在父进程退出后,本进程必要的清理工作;
- function global_procsignal_handler($signo) {
- switch($signo){
- case 3://QUIT
- case 15://TERM
- echo "父进程发送了终止信号,开始进行退出处理工作[".date("Y-m-d H:i:s")."]... \n";
- echo "清理内容1\n";
- echo "清理内容2\n";
- exit(0);
- break;
- }
- }
- //注册信号处理器
- foreach ($GLOBALS['G_SIG_MAP'] as $id => $name) {
- pcntl_signal($id, 'global_procsignal_handler');
- }
- echo date("Y-m-d H:i:s")." ###进程信号初始化### proc_id={$nowProcessGuid} end --->\n";
- /****进程信号初始化***finish**/
- }
- while (1) {
- /****超时处理主体逻辑***周期 start**/
- if($php_is_climode) pcntl_signal_dispatch(); //信号监测捕获并分发处理
- $runfunc();
- if($php_is_climode) pcntl_signal_dispatch(); //信号监测捕获并分发处理
- sleep(intval($interval));
- /****超时处理主体逻辑***周期finish**/
- }
- }catch(Exception $ex){
- echo $ex->getMessage()." stack trace=>".$ex->getTraceAsString();
- throw $ex;//向上抛出异常
- }
- }
- ?>
|