1. 程式人生 > >Memcached啟停指令碼小結

Memcached啟停指令碼小結

編寫配置檔案

vim/etc/memcached.conf

內容如下:

-m128-d-p11211-c1024

編寫啟動指令碼

vim /etc/rc.d/init.d/memcached
#!/bin/bash
#
# memcached This shell script takes care of starting and stopping
# standalone memcached.
#
. /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]||exit0[-x$DAEMONBOOTSTRAP]||exit0RETVAL=0 start(){echo-n $"Starting $DESC: " daemon $DAEMONBOOTSTRAP$DAEMONCONFRETVAL=$?[$RETVAL-eq0]&&touch$PIDFILE
echoreturn$RETVAL} stop(){echo-n $"Shutting down $DESC: " killproc $NAMERETVAL=$?echo[$RETVAL-eq0]&&rm-f$PIDFILEreturn$RETVAL}# See how we were called.case"$1"in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$?;; status) status $progRETVAL=$?;;*)echo $"Usage: $0 {start|stop|restart|status}"
exit1esacexit$RETVAL

[編輯]編寫start-memcached指令碼

vim /usr/local/bin/start-memcached
#!/usr/bin/perl -w# start-memcached
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";
}

修改許可權

chmod 755 /etc/rc.d/init.d/memcached
chmod 755 /usr/local/bin/start-memcached

啟動

service memcached start

[編輯]藝搜參考