【问题标题】:Automatically kill Linux process / php script after given time给定时间后自动终止 Linux 进程/php 脚本
【发布时间】:2013-04-01 16:39:45
【问题描述】:

我每小时运行一个用 PHP 编程的爬虫,并执行一项 cron 作业。当一切都按预期进行时,脚本会自动退出。但是,由于某些原因,有时它会陷入无限循环。情况变得更糟,因为我使用锁定文件来避免重复运行,当爬虫卡住时它永远不会再次运行,直到它手动杀死它(ps aux -> kill)

无论发生什么,我如何确保脚本在几个小时后结束?

我应该在 php 代码中添加一行吗?直接在 Linux 中这样做不是更健壮吗?

到目前为止,我最好的想法是创建一个包含所有必要命令的小批处理文件,然后使用 cron 而不是直接使用 php 脚本调用该批处理。

我说得对吗,命令应该是什么?

谢谢

编辑:到目前为止我发现的最好的是:http://www.linuxquestions.org/questions/linux-general-1/how-to-kill-the-process-after-specific-time-624453

bash 太长了,我希望有一个更智能、更短的解决方案。

干杯

【问题讨论】:

  • 我会添加一些日志代码来解决无限循环问题。从长远来看,它可能会更好。
  • 显然这是最好的解决方案。尽管如此,鉴于我正在抓取许多网站并且它们一直在变化,我需要找到我的问题的解决方案..
  • 您可以添加一个计时器,以便您在每个网站上最多花费 x 秒。我会通过为每个网站生成一个新线程来做到这一点,然后在计时器结束时将其终止。

标签: php linux cron


【解决方案1】:

这会杀死一个多小时前启动的 php 进程:

$(ps -eo comm,pid,etimes | awk '/^php/ {if ($3 > 3600) { print "kill "$2}}')

3600 - 以秒为单位的时间戳

附:你可以运行命令

> ps -eo comm,pid,etimes

前后确保一切顺利。

P.P.S.我知道这是个老问题,但有人可能会觉得它有帮助

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多