这篇文章是关于一些自动化任务的,也是为了满足我的好奇心。
这种情况可能发生吗?有人能提供一些实用的建议吗?
运行shell脚本
shell_exec(bash script);
Bash脚本类似:
- 运行shell
- 读取用于输入的文件
- 将输入传递给shell
- 从shell获取结果
- 写入另一个文件以进行输出
- 保持无限循环
将输入命令写入文件,例如:
- 等待几秒钟
- 读取结果的输出文件
- 根据输出,将新的输入命令写入文件
- 循环继续
我将留下一个无耻的链接,链接到我演示如何做到这一点的帖子,"expect in php":http://codehackit.blogspot.be/2012/04/automating-command-line-scripts-in-php.html
基本上,它只是proc_open()的一个包装器,它返回用于写入和读取另一个进程stdin/stdout的FD。http://php.net/manual/en/function.proc-open.php
为了避免部分读取和写入的问题(由于io缓冲和争用),您可能需要考虑使用一个目录,例如:
- 在目录中使用"临时"名称创建命令文件(例如"cmd_`date+%s`.txt.tmp")
- 当您完成对给定命令文件的写入后,关闭它(以刷新缓冲区),然后重命名它以删除".tmp"。重命名在文件系统中是原子的
- 让使用bash"daemon"的用户只查看"cmd_*.txt"(而不是.tmp),当使用给定的命令完成时,删除cmd文件或将其重命名为".done"后缀。(如果您需要多个并行工作进程守护程序,您甚至可以在处理cmd时将其重命名为".producing"以"claim"。只需确保在执行此操作时检查重命名的返回代码,看看是否有其他工作进程超过您。)
对输出文件执行同样的操作。