【问题标题】:controlling CLI PHP scripts from web ui从 web ui 控制 CLI PHP 脚本
【发布时间】:2011-09-02 15:45:28
【问题描述】:

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

现在我正在 UI 中执行所有转储操作,转储数据和操作数据都非常痛苦。

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

也就是说,我希望能够启动转储操作并从 UI 中停止它。我试过这种我以前在某处见过的方法

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

所以我会从前端删除停止操作时的文件,并且此方法存在可变问题,所有这些似乎都不是正确的方法。那么有没有更好的方法来从网页 UI 控制命令行脚本。

【问题讨论】:

    标签: command-line-interface php


    【解决方案1】:

    既然脚本已经拥有数据库访问权限,为什么不为 CLI 脚本创建一个控制表,包含它应该执行的操作?每次脚本循环时,您都会从表中提取记录。

    您可以用一行来修复它(也许您已经有了一个可以(ab)使用的设置表),其中包含一个命令。如果它是 1 或 "run" 或 true 或任何你喜欢的,你的脚本会继续,否则它会停止。

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

    【讨论】:

      【解决方案2】:

      只要你不想用killhttp://linux.about.com/library/cmd/blcmdl_kill.htm粗暴地杀死或者给运行脚本发送消息,大部分方法都会使用类似的方式发送数据。

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

      您使用的方法(使用文件)实际上非常简单且健壮,但它仅发送单向消息且仅发送一种类型的消息。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-08
          • 2017-05-23
          • 1970-01-01
          • 2012-05-22
          • 1970-01-01
          • 2012-06-15
          • 2016-02-20
          • 1970-01-01
          相关资源
          最近更新 更多