This guide will walk you through installing memcache and memcached on a dedicated or vps server.
For the wiki version of this guide visit: http://wiki.beyondhosting.net/Memcached_and_PHP_with_cPanel
root# yum install libevent libevent-devel -y
Head over to http://memcached.org/ and grab the latest version.
root# yum install libevent-devel libevent gcc make -y root# wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz root# tar xvf memcached-1.4.5.tar.gz root # cd memcached-1.4.5 root# ./configure && make && make install
Open /etc/memcached.conf with your favorite editor and paste in:
#Memory a usar -m 16 # default port -p 11211 # user to run daemon nobody/apache/www-data -u nobody # only listen locally -l 127.0.0.1
touch /etc/init.d/memcached chmod +x /etc/init.d/memcached
Open /etc/init.d/memcached with your favorite editor and paste in:
#!/bin/bash # # memcached This shell script takes care of starting and stopping # standalone memcached. # # chkconfig: - 80 12 # description: memcached is a high-performance, distributed memory # object caching system, generic in nature, but # intended for use in speeding up dynamic web # applications by alleviating database load. # processname: memcached # config: /etc/memcached.conf # Source function library. . /etc/rc.d/init.d/functions PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/bin/memcached DAEMONBOOTSTRAP=/usr/local/bin/start-memcached DAEMONCONF=/etc/memcached.conf NAME=memcached DESC=memcached PIDFILE=/var/run/$NAME.pid [ -x $DAEMON ] || exit 0 [ -x $DAEMONBOOTSTRAP ] || exit 0 RETVAL=0 start() { echo -n $"Starting $DESC: " daemon $DAEMONBOOTSTRAP $DAEMONCONF RETVAL=$? [ $RETVAL -eq 0 ] && touch $PIDFILE echo return $RETVAL } stop() { echo -n $"Shutting down $DESC: " killproc $NAME RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $PIDFILE return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit $RETVAL
touch /usr/local/bin/start-memcached chmod +x /usr/local/bin/start-memcached
Open /usr/local/bin/start-memcached with your favorite editor and paste in:
#!/usr/bin/perl -w # start-memcached # 2003/2004 - Jay Bonci <[email protected]> # This script handles the parsing of the /etc/memcached.conf file # and was originally created for the Debian distribution. # Anyone may use this little script under the same terms as # memcached itself. use strict; if ($> != 0 and $< != 0) { print STDERR "Only root wants to run start-memcached.\n"; exit; } my $etcfile = shift || "/etc/memcached.conf"; my $params = []; my $etchandle; # This script assumes that memcached is located at /usr/bin/memcached, and # that the pidfile is writable at /var/run/memcached.pid my $memcached = "/usr/local/bin/memcached"; my $pidfile = "/var/run/memcached.pid"; # If we don't get a valid logfile parameter in the /etc/memcached.conf file, # we'll just throw away all of our in-daemon output. We need to re-tie it so # that non-bash shells will not hang on logout. Thanks to Michael Renner for # the tip my $fd_reopened = "/dev/null"; sub handle_logfile { my ($logfile) = @_; $fd_reopened = $logfile; } sub reopen_logfile { my ($logfile) = @_; open *STDERR, ">>$logfile"; open *STDOUT, ">>$logfile"; open *STDIN, ">>/dev/null"; $fd_reopened = $logfile; } # This is set up in place here to support other non -[a-z] directives my $conf_directives = { "logfile" => \&handle_logfile }; if (open $etchandle, $etcfile) { foreach my $line (<$etchandle>) { $line =~ s/\#.*//go; $line = join ' ', split ' ', $line; next unless $line; next if $line =~ /^\-[dh]/o; if ($line =~ /^[^\-]/o) { my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/; $conf_directives->{$directive}->($arg); next; } push @$params, $line; } } unshift @$params, "-u root" unless (grep $_ eq '-u', @$params); $params = join " ", @$params; if (-e $pidfile) { open PIDHANDLE, "$pidfile"; my $localpid = <PIDHANDLE>; close PIDHANDLE; chomp $localpid; if (-d "/proc/$localpid") { print STDERR "memcached is already running.\n"; exit; } else { `rm -f $localpid`; } } my $pid = fork(); if ($pid == 0) { reopen_logfile($fd_reopened); exec "$memcached $params"; exit(0); } elsif (open PIDHANDLE,">$pidfile") { print PIDHANDLE $pid; close PIDHANDLE; } else { print STDERR "Can't write pidfile to $pidfile.\n"; }
Now we start the memcached daemon. (it is ok if “shutting down memcached” says fail.)
[root@ ~]# /etc/init.d/memcached restart Shutting down memcached: [ OK ] Starting memcached: [ OK ]
Make sure its running by:
[root@srv01 init.d]# ps aux | grep memcached
nobody 5966 0.5 0.3 18248 16444 pts/0 S 13:55 0:00 /usr/local/bin/memcached -u root -m 16 -p 11211 -u nobody -l 127.0.0.1
Now we will set memcached to run at startup:
[root@ ~]# /sbin/chkconfig memcached on [root@ ~]# /sbin/chkconfig --list | grep memcached memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Now we will install the memcache plugin for PHP.
Download the latest stable version of memcache from http://pecl.php.net/package/memcache
root# wget http://pecl.php.net/get/memcache-2.2.5.tgz root# tar xvf memcache-2.2.5.tgz root# cd memcache-2.2.5 root# phpize root# ./configure && make && make install
Now open /usr/local/lib/php.ini with your favorite text editor and find the dynamic extension section.
Add this
extension=memcache.so
Now restart apache with:
service httpd restart
We will now check to make sure memcached is running.
Create an empty file called test.php and place this in it:
<? phpinfo(); ?>
root# php -f test.php | grep "memcache support" memcache support => enabled
If this command does not return any thing the memcache plugin did not load correctly.
You can now delete test.php, your memcache installation should be functional.
References:
http://www.vbseo.com/blogs/danny-bembibre/daemon-scripts-memcached-44/
http://bloke.org/linux/installing-memcached-on-centos-cpanel/