gpt4 book ai didi

php - 来自 CLI 的 Codeigniter cron 作业抛出 memcached 错误

转载 作者:行者123 更新时间:2023-12-02 06:21:35 25 4
gpt4 key购买 nike

我正在尝试为我的 Codigniter 应用程序设置 cron 作业,但是当我运行 cron 时,它会抛出 memcached 错误:

PHP Fatal error: Call to a member function get() on a non-object in /var/www/domain.com/www/dev/system/libraries/Cache/drivers/Cache_memcached.php on line 50

Fatal error: Call to a member function get() on a non-object in /var/www/domain.com/www/dev/system/libraries/Cache/drivers/Cache_memcached.php on line 50

虽然我不知道为什么这一直在抛出,但我在我的 cron 作业文件中找不到任何错误,也找不到如何解决这个问题,因为我不知道它在哪里被调用,我调查了我自动加载的库和助手,它们似乎都没有错。

我还可以确认安装了 memcached,如果我访问我的站点,memcached 确实可以工作。

我尝试用 @ 抑制 Cached_memcached.php 中的 get(),但这没有帮助,因为没有显示输出(但应该显示输出)。

我为 cron(用户:www-data)运行的命令是:

/usr/bin/php -q /var/www/domain.com/www/dev/index.php cron run cron 

我正在运行 Ubuntu 11.10 x86_64。

这是我的 cron 文件:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Cron extends CI_Controller {

var $current_cron_tasks = array('cron');

public function run($mode)
{
if($this->input->is_cli_request())
{
if(isset($mode) || !empty($mode))
{
if(in_array($mode, $this->current_cron_tasks))
{
$this->benchmark->mark('cron_start');

if($mode == 'cron')
{
if($this->cache->memcached->get('currency_cache'))
{
if($this->cache->memcached->delete('currency_cache'))
{
$this->load->library('convert');
$this->convert->get_cache(true);
}
}

echo $mode . ' executed successfully';
}

$this->benchmark->mark('cron_end');
$elapsed_time = $this->benchmark->elapsed_time('cron_start', 'cron_end');

echo $elapsed_time;
}
}
}
}
}

最佳答案

要尝试的第一件事是确定是否支持 memcached。

var_dump($this->cache->memcached->is_supported());

要确保的第二件事是在 application/config/ 中有一个 memcached.php 文件

它应该包含具有以下键的 memcached 主机的多维数组:

  • 主持人
  • 端口
  • 权重

以下示例定义了两个服务器。数组键 server_1server_2 是无关紧要的,但是可以命名它们。

$config = array(
'server_1' => array(
'host' => '127.0.0.1',
'port' => 11211,
'weight' => 1
),
'server_2' => array(
'host' => '127.0.0.2',
'port' => 11211,
'weight' => 1
)
);

接下来我要尝试的是检查 Controller 是否可以在 Web 浏览器中运行而不是在 CLI 中运行,或者您是否遇到相同的错误。

此外,显式加载 memcached 驱动程序可能值得一试。以下将加载 memcached 驱动程序,并在调用 file 缓存驱动程序时失败。

$this->load->driver('cache', array('adapter' => 'memcached', 'backup' => 'file'));

使用此方法允许您调用 $this->cache->get(); 来考虑回退。

要检查的另一件事是您没有为 Web 和 CLI 使用单独的 php.ini 文件。

在 Ubuntu 上它位于

/etc/php5/cli/php.ini

并且您应该确保存在以下行,并且未将其注释掉

extension=memcache.so

或者,您可以创建一个具有相同内容的文件 /etc/php5/cond.d/memcache.ini

不要忘记在更改配置文件后重新启动服务。

您可以通过执行以下命令使用 CLI 检查 memcached 是否确实设置正确

php -i | grep 内存缓存

关于php - 来自 CLI 的 Codeigniter cron 作业抛出 memcached 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com