我有一个从命令行运行的长期运行(复杂)php脚本:
php myscript.php 2> myscript.err.out > myscript.out &
对于一些reasone,这会打开许多(系统级)文件句柄 - 即lsof | grep myscript.out | wc -l
正在增加,直到达到限制。
当然可以增加限制(通过ulimit
),但我真的需要找到原因,因为实际上只有一个文件句柄对该文件开放。 (即增加只会延迟问题)
由于我无法减少一个最小的例子 - 这里有一些特征:
tempnam
)有人有想法吗? (或者我可以尝试一些事情?)
答案 0 :(得分:0)
经过多次尝试后,我可以将问题深入到:
curl_setopt($ch, CURLOPT_FILE, fopen('php://stdout', 'w'));
这是在循环中完成的(因为curl实例被重用 - 请参阅here)。
所以解决方法是:将句柄存储到stdout并关闭它:
if (isset($stdout) && is_resource($stdout)) {
fclose($stdout);
}
$stdout = fopen('php://stdout', 'w');
curl_setopt($ch, CURLOPT_FILE, $stdout)
注意:您应该不直接重用$stdout
但始终关闭并再次打开它! (你会搞砸输出!)