【发布时间】:2015-12-21 23:07:21
【问题描述】:
我正在尝试构建一个小型自定义任务调度程序。基本上我的想法是我让 cron 运行我的进程脚本,它在数据库中查找并找到任何准备好运行的计划任务并运行它们。因此,我认为最好的方法是尝试通过 shell_exec 并使用 > /dev/null 在“后台”启动任务,据我所知,初始脚本(进程脚本)不会等待任务脚本完成。
所以首先,如果有更好的方法来实现这一点,我愿意接受建议。虽然请注意我在php 5.3,所以在 5.4 及更高版本中可能有一些我无法访问的选项:(
但这里有一个问题: 我正在我的 Windows 机器上测试 WAMP,我正在尝试拨打如下所示的电话:
shell_exec("php $path$base_url$querystring > output_test.txt 2>&1 &");
$path 是脚本的完整 Windows 路径
$base_url 是我正在调用的脚本的基本网址
$querystring 当然是传递给任务脚本的查询字符串
我也输出到 output_test.txt,它在同一目录中创建这样的文件,我得到以下错误:
无法打开输入文件:
C:\xampp\htdocs\email\batch_email_send_u2u.php?dealer=7
是的,我意识到路径引用了 xampp 安装,但这不是问题 - 所有 wamp 文件都从那里执行,其他一切都像这样工作多年 - 它只是以这种方式设置以支持旧设置.
在我看来,shell_exec 正在定位并运行 php,只是它无法打开引用的脚本。不知道为什么。
我还需要最终让它在真正的 linux 服务器上运行,所以任何关于如何实现它的建议都将不胜感激!
【问题讨论】:
-
如果我错了,请纠正我(这会很酷),但我认为您不能只将查询字符串附加到文件名并使用
php filename?querstring调用它。实际上是否有一个名为“batch_email_send_u2u.php?dealer=7”的文件? -
哦,有趣-我想这可能是问题的一部分。该文件是batch_email_send_u2u.php,查询字符串是dealer=7。当然我在浏览器中调用的时候可以添加查询字符串,但是从命令行调用时为什么不能添加呢?如果这确实是真的,任何关于我如何传递参数的建议都会被 $_GET 采纳?
-
您可以在调用脚本之前设置
$_GET。shell_exec("php $_GET['dealer'] = 7; $path$base_url > output_test.txt 2>&1 &");,但可能有更好的方法。
标签: php