当前位置:  开发笔记 > 编程语言 > 正文

来自CLI的Codeigniter cron作业会引发memcached错误

如何解决《来自CLI的Codeignitercron作业会引发memcached错误》经验,为你挑选了1个好方法。

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

PHP致命错误:在第50行的/var/www/domain.com/www/dev/system/libraries/Cache/drivers/Cache_memcached.php中调用非对象的成员函数get()

致命错误:在第50行的/var/www/domain.com/www/dev/system/libraries/Cache/drivers/Cache_memcached.php中调用非对象的成员函数get()

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

我也可以确认已安装memcached,如果我访问我的网站,memcached确实有效.

我试图抑制get()Cached_memcached.php@,但这并没有帮助,因为没有显示输出(但应该是显示输出).

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

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

我正在运行Ubuntu 11.10 x86_64.

这是我的cron文件:

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;
                }
            }
        }
    }   
}

Ben Swinburn.. 9

首先要尝试的是确定是否支持memcached.

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

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

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

host

port

weight

以下示例定义了两个服务器.数组键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
    )
);

接下来我要检查的是检查控制器是否可以在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具有相同内容的文件.

更改配置文件后,请不要忘记重新启动服务.

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

php -i | grep memcache



1> Ben Swinburn..:

首先要尝试的是确定是否支持memcached.

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

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

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

host

port

weight

以下示例定义了两个服务器.数组键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
    )
);

接下来我要检查的是检查控制器是否可以在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具有相同内容的文件.

更改配置文件后,请不要忘记重新启动服务.

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

php -i | grep memcache

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有