请问如何webman的master进程中运行自定义代码

深林孤鹰

请问webman中我想在master进程中运行自定义代码,比如访问一个webapi,根据返回结果来定义一些环境、参数或者退出服务,在哪里加比较优雅呢,谢谢~

306 2 2
2个回答

walkor

为了保证整个服务稳定,master进程不允许有任何业务代码。
设置bootstrap,每个进程启动的时候会执行bootstrap的启动项

https://www.workerman.net/doc/webman/others/bootstrap.html

  • 深林孤鹰 2024-06-18

    那可否这样,我自定义一个进程,从webapi获取数据后通知master进程重启、退出或者其他一些操作?

  • walkor 2024-06-18

    可以。
    如果你要restart重启的话,自定义的控制进程需要单独一个脚本启动,因为自己无法重启自己。
    reload或者其它操作可以一起启动。

  • 深林孤鹰 2024-06-18

    也就是说,只能在 自定义进程中 使用exec来控制,而不能在php代码中获取到类似app的应用对象然后app->exit()什么的命令么?

  • walkor 2024-06-18

    重启有两种:
    第一种:php start.php restart,主进程也重启那种
    这种不支持自己重启自己。需要没有亲缘进程去执行才行。

    第二种:子进程重启,主进程不重启,也就是reload
    reload只需要在业务代码中执行 posix_kill( posix_getppid(), SIGUSR1); 即可

    不确认你具体要做什么 ,具体要的是哪种重启。

  • tanhongbin 2024-06-19

    重启进程的需求是啥呢???

  • 深林孤鹰 2024-06-19

    想做一种架构,一台主服务器控制一些子服务器去做一些操作,比如停止、重启某一台子服务器的服务这种,子服务器会过一段时间查询主服务器的命令,然后去执行。。貌似不太好弄,自定义进程好像不能通知主进程去执行停止、重启这种方式?

  • tanhongbin 2024-06-19

    哦哦,大佬你这系统听着就很牛,加油

  • 深林孤鹰 2024-06-19

    很简单的需求,只是有点不常见,社区搜了很多没搜到,等真大佬回复问题~

北月

在子服务器中各自启动一个 http server,主服务器如果需要某个子服务器去停止或者重启,就发送一个 http 请求过去,子服务器的 http server 接收到主服务器的指令就直接用 shell_exec 或者 exec 之类的系统调用函数去执行相对应的指令即可。
注意:子服务器的 http server 不参与重启或者停止之类的,就只是一个接收指令和执行指令的接口。

  • 深林孤鹰 2024-06-19

    嗯,这也是个思路,可以和walkor老大说的一样单独做个脚本访问主服务器也行,不过我更趋向于webman自己去控制自身的启动和停止,如果实现不了只好按新思路来做了。。

  • 北月 2024-06-19

    如果只有一个服务,停止了,那么下次去手动启动?

  • 深林孤鹰 2024-06-19

    嗯,这个有其他办法~

×
🔝