从web ui控制CLI PHP脚本

时间:2011-09-02 07:27:36

标签: command-line-interface php

我有一个应用程序,其中有一个转储器操作,它不断从Web服务检索xml流,然后将其转储到mysql数据库中。

现在我正在UI中执行所有转储操作,这对于转储数据和操纵数据都是一个真正的痛苦。

所以我制作了一个单独的CLI脚本来处理转储操作,前端可以每秒轮询数据库以查看它是否有新数据,这将是一个更为简单的方法。但现在唯一的问题是我无法从Web UI控制cli脚本。

这是我希望能够启动转储操作并从UI停止它。我试过这种方法,我之前已经看过了

while(true) {
if(file_exist($file)) {
//do action 
} else { 
break;
}
}

如此错误从前端删除停止操作的文件,并且此方法存在变量问题,所有这些似乎都不是正确的方法。那么是否有更好的方法从Web页面UI控制命令行脚本。

3 个答案:

答案 0 :(得分:1)

由于脚本已具有数据库访问权限,为什么不为CLI脚本创建控制表,其中包含应执行的操作?每次脚本循环时,您都会从表中提取记录。

你可以用一行修复它(也许你已经有了一个你可以(ab)使用的设置表),包含一个命令。如果它是1或“run”或者true或者你喜欢什么,你的脚本会继续,否则就会停止。

然后,您可以从Web UI“发送”命令,这些命令将存储在指定的表中。

答案 1 :(得分:0)

只要您不想使用kill http://linux.about.com/library/cmd/blcmdl_kill.htm残酷地杀死或向正在运行的脚本发送消息,大多数方法都会使用类似的方式发送数据。

您可以使用特殊的数据库记录或表来在脚本之间发送/接收命令和消息,或者在文件系统中使用特殊文件或共享内存等。它们都涉及异步消息传递方法。你可能更好地设计你的脚本以尽可能少地消耗资源,所以你实际上不必杀死它。

您正在使用的方法(使用该文件)实际上非常简单和强大,但它只发送单向消息而且只发送一种消息。

答案 2 :(得分:0)

使用exec是一种“控制”CLI脚本的简单方法,但是存在安全风险,如果脚本不在内部服务器上,我不建议使用它。相反,我建议您创建一种守护程序脚本(我建议这样做但实现起来可能有点困难)或者通过cron定期运行CLI脚本(窗口上的计划任务)。也许每3分钟一次。 Web UI和CLI脚本使用DB相互“交谈”。例如。 Web UI发布CLI脚本必须处理的数据,CLI脚本在完成后发布。这种方法可能存在并发问题,但如果应用程序不是很大,那么这确实不会成为问题,即每秒数千次查询。