【发布时间】:2010-05-26 01:46:59
【问题描述】:
我已经让这个项目在 mod_perl 下运行,它显示了主机上的一些信息。此页面上有一个带有下拉菜单的文本框,允许用户 ping/nslookup/traceroute 主机。输出显示在文本框中,如 tail -f。
它在 CGI 下工作得很好。当用户请求 ping 时,它会对服务器进行 AJAX 调用,实际上它会在服务器上启动 ping,并将输出发送到临时文件。然后后续的 ajax 调用将“跟踪”文件,以便更新输出,直到 ping 完成。作业完成后,临时文件将被删除。
但是,在 mod_perl 下,无论我做什么,我都可以阻止它创建僵尸进程。我已经尝试了所有方法,双重分叉,使用IPC::Run 等。最后,在 mod_perl 下不鼓励系统调用。
所以我的问题是,也许有更好的方法来做到这一点?是否有 CPAN 模块可用于创建可在 mod_perl 下工作的命令行作业和拖尾输出?我只是在寻找一些建议。
我知道我可能会创建某种“工作”守护程序,我用详细信息发出信号并从中获取更新。它会运行命令并跟踪它们的状态等。但是有没有更简单的方法?
提前致谢。
【问题讨论】:
-
看看这个 brian d foy 的回答是否有帮助:stackoverflow.com/questions/2711520/…
-
是的,我看过那篇文章中的一些 CPAN 模块。它让我朝着一个好的方向前进。但是我需要一个模块来保持作业状态,以便每次调用 AJAX 脚本时,它都可以从文件/db/无论作业的状态是什么(通过 ID 或其他东西)加载。有谁知道这样做的 CPAN 模块?我会继续寻找...
-
老实说,我会采用直截了当的方法...为原始作业创建一个唯一 ID(例如,$$ 和时间戳的组合),将其合并到文件名中,然后返回将原始请求中的 ID 存储在页面中......然后每个 AJAX 调用都会将该 ID 发送到服务器,读取日志的脚本会从中重建日志文件名
-
是的,我做过类似的事情,我会发布我的解决方案。