为了账号安全,请及时绑定邮箱和手机立即绑定

请问PHP如何实现“代码热更新”

请问PHP如何实现“代码热更新”

PHP
哆啦的时光机 2019-03-08 09:07:34
是这样,我有一个PHP脚本,不断地从队列里取出任务予以处理,大致逻辑:<main.php>require do_job.php;while (true){$job = queue_pop(); // 取出一个任务,阻塞调用do_job($job); // 这个函数来自 do_job.php}该脚本直接从命令行启动:nohup php main.php &但是随着业务的发展,我发现要处理的任务种类越来越多,所以我需要不断地修改 do_job() 函数,以处理新类型的任务或更改之前的逻辑;但是每次修改这个函数,我都需要先 kill 掉之前的进程,然后再次执行上面的命令行,非常不方便。我想问,如何在不停止 main.php 进程的条件下,更新 do_job.php ?如果可以的话,尽量不要引入重量级的第三方框架。我知道有一种方案可行,就是每当收到任务后,创建一个php子进程,把任务通过某种进程间通信机制传给它来处理,就像Apache服务器。但是我觉得这种方案过于重量级了,因为多数情况下 do_job()函数很简单,很快就能执行完,专门为它创建一个进程,有点“杀鸡用牛刀”。谢谢!
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我们业务中也有类似这样的异步任务模块,用于处理队列、报表统计等等

  • crontab 任务,每分钟执行一个 crontab.sh 脚本,crontab.sh 脚本用于分发 php 任务,可自定义设置1分钟、5分钟、1小时,根据需要分配粒度,这样新增 php 任务不需要运维帮忙新增 crontab 任务(需要申请运维工单)

  • php 任务激活之后,执行任务前:判断是否存在任务、执行任务进程数是否超过规定数目、进程是否触发概率回收

  • 执行当前任务

简单实用 while + nohup 方式, 使 php 脚本常驻,逻辑处理不当,容易导致内存泄漏


查看完整回答
反对 回复 2019-03-28
?
浮云间

TA贡献1829条经验 获得超4个赞

写个脚本 检测你代码是否变化 变化就重启

查看完整回答
反对 回复 2019-03-28
  • 2 回答
  • 0 关注
  • 440 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信