我正在为我的公司制作扫描服务器,它将用于从nessus,nmap,nikto等工具启动扫描。我已经用php编写了这些页面,所以一旦扫描启动它就会背景处理并返回PID。设计规范的一部分是,扫描完成后,结果将通过电子邮件发送给合适的顾问。这是我正在寻找一些想法的地方,因为我不知道如何去做。
我是否最好让php脚本将PID提供给python(我的主要语言)脚本的实例,该脚本经常检查过程是否已完成,例如?我确实尝试在PHP页面中放置这个进程检查循环,但显然这会使PHP页面在等待扫描完成时暂停,这对我不利,因为将运行多个扫描。
或者我会更好地创建一个存储有关进程的状态信息的数据库?我没有数据库经验,但这可能是学习的好时机。
有什么建议吗?甚至一些我可以谷歌的想法将非常感激!
由于
答案 0 :(得分:2)
当我遇到这种问题时,我通常会做一个完成整个工作的Python守护进程,让PHP只是向这个Python守护进程发送消息。这些消息可以非常简单,就像经常检查的目录中的一堆文件,或者在数据库中注册。
这种影响有多好取决于你的申请规模。
答案 1 :(得分:2)
我认为你正在开始这样的过程:
exec("/path/to/file > /dev/null 2>&1 &");
...在这种情况下,您可以在中间添加另一个脚本:
exec("/path/to/file | php /some/php/script.php > /dev/null 2>&1 &");
然后,在script.php
中(或者如果你想在python中做),你可以这样做:
while (!feof(STDIN)) {
sleep(1); // ...or something less horrible that also avoids racing
}
// When you get here, the process has finished