我用 php start.php start -d 方式启动Workerman,奇怪的是没有log文件生成 , 我在start.php文件下面写上了这行代码 Worker::$stdoutFile = '/home/www/logs/'.date('Y-m-d').".log"; 之前一直都可以的,但不知道为什么这次就不会生成文件,请高人指点一下。
把start.php代码贴一下
<?php /**
ini_set('display_errors', 'on'); use Workerman\Worker;
if(strpos(strtolower(PHP_OS), 'win') === 0) { exit("start.php not support windows, please use start_for_win.bat\n"); }
// 检查扩展 if(!extension_loaded('pcntl')) { exit("Please install pcntl extension. See http://doc3.workerman.net/appendices/install-extension.html\n"); }
if(!extension_loaded('posix')) { exit("Please install posix extension. See http://doc3.workerman.net/appendices/install-extension.html\n"); }
// 标记是全局启动 define('GLOBAL_START', 1);
require_once __DIR__ . '/vendor/autoload.php';
// 加载所有Applications//start.php,以便启动所有服务 foreach(glob(__DIR__.'/Applications//start*.php') as $start_file) { require_once $start_file; }
Worker::$stdoutFile = '/home/www/logs/log.log';
// 运行所有服务 Worker::runAll();
而且 用户是root 应该不存在权限问题
启动脚本没发现啥问题,你确定也不是权限的问题,而且连log文件都没生成,所以我感觉这个你还是源码debug下吧。
@614:好吧 ,谢谢你啦
不客气,Worker.php源码的resetStd()方法里调试下fopen() 的返回值。
不过逆推绝不会是workerman的问题,还是你环境哪里影响到了,除了常见原因就不好判断了,所以源码debug起。
关于这个log的问题我做了个测试,我下载了最新的,GatewayWorker 添加了$stdoutFile功能,第一次启动是可以的,但我把那个log文件删除,再stop后 再start -d 就不能生成log文件了。这是为什么呢?
是不是其它进程占用了这个文件,虽然删除了,但是实际上其它进程仍然在引用这个文件,导致新文件无法生成。ps aux 看下是不是开了多个workerman吧
把start.php代码贴一下
<?php
/**
*/
ini_set('display_errors', 'on');
use Workerman\Worker;
if(strpos(strtolower(PHP_OS), 'win') === 0)
{
exit("start.php not support windows, please use start_for_win.bat\n");
}
// 检查扩展
if(!extension_loaded('pcntl'))
{
exit("Please install pcntl extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
}
if(!extension_loaded('posix'))
{
exit("Please install posix extension. See http://doc3.workerman.net/appendices/install-extension.html\n");
}
// 标记是全局启动
define('GLOBAL_START', 1);
require_once __DIR__ . '/vendor/autoload.php';
// 加载所有Applications//start.php,以便启动所有服务
foreach(glob(__DIR__.'/Applications//start*.php') as $start_file)
{
require_once $start_file;
}
Worker::$stdoutFile = '/home/www/logs/log.log';
// 运行所有服务
Worker::runAll();
而且 用户是root 应该不存在权限问题
启动脚本没发现啥问题,你确定也不是权限的问题,而且连log文件都没生成,所以我感觉这个你还是源码debug下吧。
@614:好吧 ,谢谢你啦
不客气,Worker.php源码的resetStd()方法里调试下fopen() 的返回值。
不过逆推绝不会是workerman的问题,还是你环境哪里影响到了,除了常见原因就不好判断了,所以源码debug起。
关于这个log的问题我做了个测试,我下载了最新的,GatewayWorker 添加了$stdoutFile功能,第一次启动是可以的,但我把那个log文件删除,再stop后 再start -d 就不能生成log文件了。这是为什么呢?
是不是其它进程占用了这个文件,虽然删除了,但是实际上其它进程仍然在引用这个文件,导致新文件无法生成。ps aux 看下是不是开了多个workerman吧