【问题标题】:PHP script doesn't complete when run from cron从 cron 运行时 PHP 脚本未完成
【发布时间】:2011-09-09 21:54:14
【问题描述】:

我有一个 PHP 脚本,它遍历数据库中的所有产品并查看会话文件以查看哪些产品在用户的购物篮中。然后它释放分配给篮子的库存,但这些篮子的会话已过期。很简单。

对于循环中的每个产品,它都会打印出产品 ID。

如果我从命令行运行脚本:

./release.php

它贯穿所有产品 (~2500)。但是,如果脚本是由 crontab 运行的,那么它会增加 150 到 300 个产品;然后它会停止而没有任何错误。

crontab -l
# m h dom mon dow 命令
*/3 * * * * /var/www/vhosts/example.com/release.php &> $HOME/release.log

/var/log/cron.log 也没有什么用处:

6 月 7 日 10:00:01 xxxxxxx /USR/SBIN/CRON[15751]: (root) CMD (/var/www/vhosts/example.com/release.php &> $HOME/log)

【问题讨论】:

  • 可能内存用完了。你的 php cli 环境是否分配了足够的内存?
  • $HOME/log 中有用的东西?
  • 设置执行时间更长 => max_execution_time :每个脚本的最大执行时间,以秒为单位(默认 30 秒) => max_input_time :每个脚本可能花费在解析请求数据上的最长时间(60 秒) = > memory_limit : 脚本可能消耗的最大内存量(默认 8MB)
  • 你检查过你的php错误日志吗?
  • 您每 3 分钟运行一次此命令。脚本运行一次是否需要超过 3 分钟?如果是这样,可能有一次运行会干扰前一次运行。

标签: php cron


【解决方案1】:

你确定它正在停止吗?您每 3 分钟执行一次脚本,并在每次调用时“重置”日志文件。 (>file 而不是>>file)

如果脚本已经在运行,你是否使用某种锁定机制来阻止脚本启动?

【讨论】:

  • 当我从命令行运行它时,只需不到一秒的时间即可完成。我无法想象为什么通过 cron 运行需要超过 3 分钟。
  • 你直接尝试时调用它./release.php,可能是包含路径有问题?更改您的 cronjob 以执行相同的操作:cd /var/www/vhosts/example.com/ && ./release.php
【解决方案2】:

要么确保您的脚本一次只运行一个,要么将结果输出到唯一命名的日志文件(这可能会更好,因为您希望能够查看过去的执行情况)。

*/3 *  *   *   *     /var/www/vhosts/example.com/release.php &> $HOME/release-$(date "+%Y%m%d%-%H%M%S").log

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多