webman启动后运行有报错是哪里还需要设置吗,ErrorException: stream_socket_client(): unable to connect to tcp://0.0.0.0:2345 (在其上下文中,该请求的地址无效。
) in D:\www\webman\vendor\yzh52521\webman-task\src\Client.php:14
1.think-orm已安装,少安装了crontab(后面已安装)
2.ip地址改成了127.0.0.1:8787(没有报ip错误了)
现在日志里的错误是:default.ERROR: json_decode() expects parameter 1 to be string, bool given {"exception":"TypeError: json_decode() expects parameter 1 to be string, bool given in D:\www\webman\vendor\yzh52521\webman-task\src\Client.php:33
TypeError: json_decode() expects parameter 1 to be string, bool given in E:\www\1043huicmf_webman\vendor\yzh52521\webman-task\src\Client.php:36
Stack trace:
设置一个定时任务每分钟跑一遍用来执行设置用户的定时任务
这个有什么好的方案吗?想写个插件
其实crontab如果不是那种要求精确到秒执行的,我更倾向走命令行,思路大概就是两种:
但是要注意处理前一个计划任务执行时间过长,导致前一个计划任务(不管是Main还是Sub)没有执行完,又到了下一个执行时间的问题
看了一下,不好写
独立跑命令行,可以规避掉因为WM挂掉而导致无法执行计划任务的问题
意外情况太多了
放数据库
扫描数据库里的任务来执行
做一个专门单个定时任务进程,当有定时任务时,推送到定时任务进程上,然后在定时任务进程上 启动 定时任务 ,并且保存 定时任务对象,当需要关闭定时任务时,推送到 定时任务进程 在进程上拿 定时任务对象 进行关闭。 感觉这样子应该可以,没有实际操作过
我本地已经测试的差不多了,有人需要么?
🐂
大,数据库需要手动创建吗,还是composer直接安装
插件已经写好了
欢迎大家测试
是数据库控制的吗??
必须数据库控制啊
webman启动后运行有报错是哪里还需要设置吗,ErrorException: stream_socket_client(): unable to connect to tcp://0.0.0.0:2345 (在其上下文中,该请求的地址无效。
) in D:\www\webman\vendor\yzh52521\webman-task\src\Client.php:14
plugin.yzh52521.task.cron_task 进程启动了么
启动了webman,默认端口是8787,cron_task好像没有启动,没有这个文件
unable to connect to tcp://0.0.0.0:2345,看起来是ip地址不对,应该是127.0.0.1 才对吧
那你修改下 plugin.yzh52521.task.app.task.listen 为127.0.0.1:2345
不行的,刚开始我以为也是这个问题,后面换了ip也是不对
cron_task进程就没有启动起来
安装 think-orm ,crontab 这些插件了么?
1.think-orm已安装,少安装了crontab(后面已安装)
2.ip地址改成了127.0.0.1:8787(没有报ip错误了)
现在日志里的错误是:default.ERROR: json_decode() expects parameter 1 to be string, bool given {"exception":"TypeError: json_decode() expects parameter 1 to be string, bool given in D:\www\webman\vendor\yzh52521\webman-task\src\Client.php:33
你怎么调用的 ?
<?php
namespace app\controller;
use support\Request;
use support\log;
use think\facade\Db;
use Workerman\Crontab\Crontab;
class Test
{
public function add(Request $request)
{
return json(Db::name('users')->select()->toArray());
}
//定时任务
public function crontab()
{
$crontab = new Crontab('1 ', function(){
echo date('Y-m-d H:i:s')."\n";
});
Log::info('log test123',['AAA'=>123,'BB'=>222]);
/$param = [
'method' => 'crontabIndex',//计划任务列表
'args' => ['limit' => 10, 'page' => 1]//参数
];/
$param = [
'method' => 'crontabCreate',//计划任务列表
'args' => [
'title' => '输出webman版本',
'frequency' => '/30 *',
'shell' => 'php webman version',
'remark' => '每30秒执行',
'sort' => 0,
'status' => 1
]//参数
];
$result = \yzh52521\Task\Client::instance()->request($param);
print_r($result);
//return json($result);
//return response($result);
}
}
列表
添加
我调用的写法没问题,复制你的也是一样。。你的webman启动后能看到任务进程吗
可以啊 加我qq好友我帮你看看?
好,你qq多少我加你
QQ:396751927
TypeError: json_decode() expects parameter 1 to be string, bool given in E:\www\1043huicmf_webman\vendor\yzh52521\webman-task\src\Client.php:36
Stack trace:
0 E:\www\1043huicmf_webman\vendor\yzh52521\webman-task\src\Client.php(36): json_decode(false)
1 E:\www\1043huicmf_webman\app\admin\controller\system\CrontabController.php(50): yzh52521\Task\Client->request(Array)
2 E:\www\1043huicmf_webman\vendor\workerman\webman-framework\src\App.php(251): app\admin\controller\system\CrontabController->add(Array)
3 E:\www\1043huicmf_webman\app\admin\middleware\SystemLog.php(46): Webman\App::Webman{closure}(Object(support\Request))
4 E:\www\1043huicmf_webman\vendor\workerman\webman-framework\src\App.php(245): app\admin\middleware\SystemLog->process(Object(support\Request), Object(Closure))
5 E:\www\1043huicmf_webman\app\admin\middleware\AuthCheckAccess.php(75): Webman\App::Webman{closure}(Object(support\Request))
6 E:\www\1043huicmf_webman\vendor\workerman\webman-framework\src\App.php(245): app\admin\middleware\AuthCheckAccess->process(Object(support\Request), Object(Closure))
7 E:\www\1043huicmf_webman\app\admin\middleware\AccessControl.php(21): Webman\App::Webman{closure}(Object(support\Request))
8 E:\www\1043huicmf_webman\vendor\workerman\webman-framework\src\App.php(245): app\admin\middleware\AccessControl->process(Object(support\Request), Object(Closure))
9 E:\www\1043huicmf_webman\vendor\webman\action-hook\src\ActionHook.php(30): Webman\App::Webman{closure}(Object(support\Request))
10 E:\www\1043huicmf_webman\vendor\workerman\webman-framework\src\App.php(245): Webman\ActionHook\ActionHook->process(Object(support\Request), Object(Closure))
11 E:\www\1043huicmf_webman\app\middleware\AccessControl.php(21): Webman\App::Webman{closure}(Object(support\Request))
12 E:\www\1043huicmf_webman\vendor\workerman\webman-framework\src\App.php(245): app\middleware\AccessControl->process(Object(support\Request), Object(Closure))
13 E:\www\1043huicmf_webman\vendor\workerman\webman-framework\src\App.php(330): Webman\App::Webman{closure}(Object(support\Request))
14 E:\www\1043huicmf_webman\vendor\workerman\webman-framework\src\App.php(147): Webman\App::findRoute(Object(Workerman\Connection\TcpConnection), '/admin/system/c...', 'GET/admin/syste...', Object(support\Request))
15 E:\www\1043huicmf_webman\vendor\workerman\workerman\Connection\TcpConnection.php(638): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))
16 E:\www\1043huicmf_webman\vendor\workerman\workerman\Events\Select.php(295): Workerman\Connection\TcpConnection->baseRead(Resource id #338)
17 E:\www\1043huicmf_webman\vendor\workerman\workerman\Worker.php(2435): Workerman\Events\Select->loop()
18 E:\www\1043huicmf_webman\vendor\workerman\workerman\Worker.php(1430): Workerman\Worker->run()
19 E:\www\1043huicmf_webman\vendor\workerman\workerman\Worker.php(1373): Workerman\Worker::forkWorkersForWindows()
20 E:\www\1043huicmf_webman\vendor\workerman\workerman\Worker.php(549): Workerman\Worker::forkWorkers()
21 E:\www\1043huicmf_webman\start.php(112): Workerman\Worker::runAll()
22 {main}
@yzh52521
报错
确实一个字段 frequency
大佬怎么改
你对照下数据库是不是少字段
对比后,没有少字段
我知道了, https://www.workerman.net/plugin/42 你看下 文档
最新版 字段有变动
这次可以了
@yzh52521
代码有个小问题:
因composer安装后创建的数据可靠 parameter字段是不能为空且不能为null的,而代码中 默认为空的时候返回的是null,这样在写入数据库的时候一直会报错无法写入成功
感谢反馈 已修复
第三方项目有一个你可以参考
你看我写的文章
https://my.oschina.net/owenzhang24/blog/5522645
new Crontab('/1 ', function () { '/1 '这个你可以写入redis,然后从redis读取,动态修改
打不开你的文章
现在呢?
new Crontab('/1 ', function () { '/1 '这个你可以写入redis,然后从redis读取,动态修改
这个redis里面值改了 要重启服务才会生效把
你可以试下,我没弄过,我想值改了,不用重启也可以,,你试下,告诉我结果,我也备注记录下
我试了,值改了,没有生效,重启之后才会生效
好的
可以修改redis里面值后,然后代码里面执行重启webman服务吗,让其修改生效
代码里面执行重启webman服务,可以试下
代码里面怎么重启webman
哈哈。
你还是参考这个插件吧 composer require yzh52521/webman-task