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/