thinkphp 5中使用crontab,如何stop服务

hiker588

我在thinkphp 5中整合了Workerman后,使用Crontab作为定时任务,根据官方提供的文档,已经整合成功,具体环境及软件版本如下:

  • Linux 7
  • php 7.2
  • thinkphp 5.0.10
  • workerman/workerman 3.5.23
  • workerman/crontab 1.0

整合完成后,使用 php crm_server.php start -d可以正常启动守护进程,且以下代码执行成功:
截图

但是此时想要停止Workerman中的Crontab定时任务,使用php crm_server.php stop却无法停止,报错信息如下:
截图

此时在以上代码的Kernel控制器中新增stop()方法:
截图

然后再次执行php crm_server.php stop,报错信息已经消失,但是任务依然没有终止:
截图

日志文件中依然会有输出:
截图

按照添加stop()的方法,添加reload()restart()status()方法然后调用Workerman中的对应方法,依然无效果,请问各位大佬,此时我应该如何实现php crm_server.php + stopreloadrestartstatus的功能?

2671 1 0
1个回答

walkor

看起来是tp截获了命令,导致workemran无法收到命令。

不知道你为什么把tp和workemran整合在一起,如果你想在workerman中用tp的数据库类,没必要把tp和workerman在代码层面整合在一起,只需要在纯净的workerman项目中利用composer require topthink/think-orm将tp的数据库组件加进来即可。tp-orm手册 https://www.kancloud.cn/manual/think-orm/1257998

  • hiker588 2020-12-25

    现在不确定是不是tp截获了命令,我按照您在另外一个帖子里提供的方法,在代码中执行 posix_kill(posix_getppid(), SIGINT); 命令依然无法停止。我先试一下您说的workerman整合tp-orm的方法,看看修改成本大不大。非常感谢。

年代过于久远,无法发表回答
🔝