如何停止在PHP中后台运行的控制器动作?

时间:2019-06-30 00:49:07

标签: php codeigniter

我的代码遵循MVC结构,或更具体地说,我正在使用Codeigniter。我想在后台运行一些东西(无限循环)。但是我想在某个时候停止它。怎么做?

我尝试将停止信号传递给正在运行的动作,但不起作用

comments = [] 
for post in posts["data"]:
    first_comments = graph.get_connections(id=post["id"], connection_name="comments")
    comments.extend(first_comments["data"])
    while True:
        try:
            next_comments =  requests.get(post_comments["paging"]["next"]).json()
            comments.extend(next_comments["data"])
        except KeyError:
            break

所以我要做的是先在浏览器中键入“ mydomain.com/my_controller/start”开始运行,然后在浏览器中键入“ mydomain.com/my_controller/stop”停止运行。但是停止动作不会返回,而只会继续等待。谁能告诉我如何停止后台运行操作?我不能仅仅通过杀死PID来停止它,因为我正在使用共享的Web托管。

之所以这样做,是因为我想编写自动比特币交易的代码,即我的应用程序将在后台继续运行7 X 24,获取市场信息,分析数据并将交易命令发送到平台。所以我需要在必要时控制停止。

1 个答案:

答案 0 :(得分:1)

如果您熟悉运行CLI命令,并且共享托管服务提供商允许您对帐户具有外壳程序访问权限,则可以将处理程序写入run via a CLI command。 CodeIgniter使这一操作变得非常简单。一旦运行正常,您可以键入CLI命令,后跟与号(例如php -f index.php controller_name route_name &),该过程将在该过程中运行,直到被kill命令杀死为止。

但是请注意,无限循环会很快导致系统上CPU和/或RAM的使用失控,并且共享的托管服务提供商如果检测到这种情况,将不会对您感到非常满意。我建议您使用sleep()来暂停执行代码循环之间的最大可接受时间。另外,请仔细检查代码,并通过执行无休止的附加数组操作或类似的操作来确保不会增加代码的每个循环的内存使用量。