【问题标题】:Interpreting, Write failed: Broken pipe message for cli php script解释,写入失败:cli php 脚本的管道消息损坏
【发布时间】:2013-06-04 07:16:08
【问题描述】:

我正在使用以下命令从 ssh 运行 php 脚本

./script.php &

脚本有一个循环,应该循环大约 800,000 次(因此需要几天时间才能运行)。然而,它目前正在停止进入该过程的数千个循环。我的错误处理程序没有从脚本中捕获任何错误,但控制台会读取。

Write failed: Broken pipe

谁能解释这条消息的含义,这表明什么样的问题,以及我可以如何追踪它?

更新:

为了总结脚本的作用,它从我的数据库(与脚本托管在同一台服务器上)的表中选择 800,000 行。对于每一行,它都会对第三方站点进行一次休息调用,然后将该数据写入同一数据库中的不同表(与脚本托管在同一台服务器上)。

【问题讨论】:

  • 没有代码,只是胡乱猜测。
  • 您是否正在重定向脚本的输出?脚本是否写入网络连接?

标签: php command-line-interface broken-pipe


【解决方案1】:

Broken pipe 有两个原因:

  1. 程序正在写入管道,或者是因为它使用了类似popen() 的函数,或者脚本的输出被重定向到管道,并且从管道读取的程序退出(或关闭了管道的末端)出于其他原因)。

  2. 程序正在写入网络连接,连接被另一端关闭。

【讨论】:

  • 嗨,Barmar,感谢您的回复。我不认为场景 #1 适用于我的脚本。我的脚本确实对第三方网络服务进行了休息调用(请参阅问题更新)是写入网络连接吗?
  • 它通常不会发生在简单的 HTTP 请求/响应连接中。它通常在您写入批量数据的长期连接中。
  • 我正在进行大约 800,000 次休息调用,并将每个结果写入数据库。你认为这符合场景 #2 的条件吗?关于如何调试的任何建议?
  • 我希望每个调用都是独立的,但是 REST 库使用持久连接的方式可能存在问题,并且它不能正确处理故障。也许你应该发布你的代码。
猜你喜欢
  • 2011-07-13
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多