我有一个应用程序,其中有一个转储操作,它不断地从web服务中检索xml流,解析它,然后将其转储到mysql DB中。
现在,我正在UI中执行所有的转储操作,转储数据和操作数据都是一件很痛苦的事情。
因此,我创建了一个单独的CLI脚本,它将负责转储操作,前端可以每秒轮询数据库,看看它是否有新数据,这将是一种简单得多的方式。但现在唯一的问题是,我无法从web UI控制cli脚本。
也就是说,我希望能够从UI启动转储操作并停止它。我尝试过这种我以前见过的方法。
while(true) {
if(file_exist($file)) {
//do action
} else {
break;
}
}因此,我将从前端删除停止操作时的文件,这种方法存在各种问题,所有这些似乎都不是正确的方法。那么,有没有更好的方法从Web页面UI控制命令行脚本呢?
发布于 2011-09-02 15:32:31
既然脚本已经拥有数据库访问权限,为什么不为CLI脚本创建一个控制表,其中包含它应该执行的操作?每次脚本循环时,您都需要从表中提取记录。
你可以用一行(也许你已经有了一个你可以(Ab)使用的设置表)来修复它,它只包含一个命令。如果它是1、"run“、true或任何你喜欢的值,你的脚本就会继续,否则就会停止。
然后,您可以从Web UI“发送”命令,这些命令将存储在指定的表中。
发布于 2011-09-02 15:34:38
只要您不想使用kill http://linux.about.com/library/cmd/blcmdl_kill.htm粗暴地杀死正在运行的脚本或向正在运行的脚本发送消息,大多数方法都会使用类似的方式发送数据。
您可以使用特殊的数据库记录或表在脚本之间、文件系统中的特殊文件或共享memory...etc之间发送/接收命令和消息。它们都涉及异步消息传递方法。你最好把你的脚本设计成消耗尽可能少的资源,这样你就不会真的杀死它了。
您正在使用的方法(对于文件)实际上非常简单和健壮,但它只单向发送消息,并且只有一种类型的消息。
发布于 2011-09-02 15:45:29
使用exec是一种简单的方式来“控制”你的命令行界面脚本,但是这是一个安全风险,如果你的脚本不在内部服务器上,我不建议你这么做。相反,我建议您创建一种守护程序脚本(我建议这样做,但它可能更难实现)或通过cron定期运行您的CLI脚本(window上的计划任务)。也许每3分钟一次。web用户界面和CLI脚本使用DB相互‘对话’。例如:web用户界面将发布CLI脚本必须处理的数据,CLI脚本将在处理完成后发布数据。这种方法可能会有并发问题,但如果应用程序不是很大,即每秒数千次查询,那么这就不是问题。
https://stackoverflow.com/questions/7280360
复制相似问题