init
This commit is contained in:
59
wcmtools/memcached/scripts/memcached-init
Executable file
59
wcmtools/memcached/scripts/memcached-init
Executable file
@@ -0,0 +1,59 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# skeleton example file to build /etc/init.d/ scripts.
|
||||
# This file should be used to construct scripts for /etc/init.d.
|
||||
#
|
||||
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
|
||||
# Modified for Debian
|
||||
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
|
||||
#
|
||||
# Version: @(#)skeleton 1.9 26-Feb-2001 miquels@cistron.nl
|
||||
#
|
||||
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
||||
DAEMON=/usr/bin/memcached
|
||||
DAEMONBOOTSTRAP=/usr/share/memcached/scripts/start-memcached
|
||||
NAME=memcached
|
||||
DESC=memcached
|
||||
PIDFILE=/var/run/$NAME.pid
|
||||
|
||||
test -x $DAEMON || exit 0
|
||||
test -x $DAEMONBOOTSTRAP || exit 0
|
||||
|
||||
set -e
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo -n "Starting $DESC: "
|
||||
start-stop-daemon --start --quiet --exec $DAEMONBOOTSTRAP
|
||||
echo "$NAME."
|
||||
;;
|
||||
stop)
|
||||
echo -n "Stopping $DESC: "
|
||||
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
|
||||
echo "$NAME."
|
||||
rm -f $PIDFILE
|
||||
;;
|
||||
|
||||
restart|force-reload)
|
||||
#
|
||||
# If the "reload" option is implemented, move the "force-reload"
|
||||
# option to the "reload" entry above. If not, "force-reload" is
|
||||
# just the same as "restart".
|
||||
#
|
||||
echo -n "Restarting $DESC: "
|
||||
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
|
||||
rm -f $PIDFILE
|
||||
sleep 1
|
||||
start-stop-daemon --start --quiet --exec $DAEMONBOOTSTRAP
|
||||
echo "$NAME."
|
||||
;;
|
||||
*)
|
||||
N=/etc/init.d/$NAME
|
||||
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
|
||||
echo "Usage: $N {start|stop|restart|force-reload}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
111
wcmtools/memcached/scripts/memcached-tool
Executable file
111
wcmtools/memcached/scripts/memcached-tool
Executable file
@@ -0,0 +1,111 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# memcached-tool:
|
||||
# stats/management tool for memcached.
|
||||
#
|
||||
# Author:
|
||||
# Brad Fitzpatrick <brad@danga.com>
|
||||
#
|
||||
# License:
|
||||
# public domain. I give up all rights to this
|
||||
# tool. modify and copy at will.
|
||||
#
|
||||
|
||||
use strict;
|
||||
use IO::Socket::INET;
|
||||
|
||||
my $host = shift;
|
||||
my $mode = shift || "display";
|
||||
my ($from, $to);
|
||||
|
||||
if ($mode eq "display") {
|
||||
undef $mode if @ARGV;
|
||||
} elsif ($mode eq "move") {
|
||||
$from = shift;
|
||||
$to = shift;
|
||||
undef $mode if $from < 6 || $from > 17;
|
||||
undef $mode if $to < 6 || $to > 17;
|
||||
print STDERR "ERROR: parameters out of range\n\n" unless $mode;
|
||||
} else {
|
||||
undef $mode;
|
||||
}
|
||||
|
||||
undef $mode if @ARGV;
|
||||
|
||||
die
|
||||
"Usage: memcached-tool <host[:port]> [mode]\n
|
||||
memcached-tool 10.0.0.5:11211 display # shows slabs
|
||||
memcached-tool 10.0.0.5:11211 # same. (default is display)
|
||||
memcached-tool 10.0.0.5:11211 move 7 9 # takes 1MB slab from class #7
|
||||
# to class #9.
|
||||
|
||||
You can only move slabs around once memory is totally allocated, and only
|
||||
once the target class is full. (So you can't move from #6 to #9 and #7
|
||||
to #9 at the same itme, since you'd have to wait for #9 to fill from
|
||||
the first reassigned page)
|
||||
" unless $host && $mode;
|
||||
|
||||
$host .= ":11211" unless $host =~ /:\d+/;
|
||||
|
||||
my $sock = IO::Socket::INET->new(PeerAddr => $host,
|
||||
Proto => 'tcp');
|
||||
die "Couldn't connect to $host\n" unless $sock;
|
||||
|
||||
|
||||
if ($mode eq "move") {
|
||||
my $tries = 0;
|
||||
while (1) {
|
||||
print $sock "slabs reassign $from $to\r\n";
|
||||
my $res = <$sock>;
|
||||
$res =~ s/\s+//;
|
||||
if ($res eq "DONE") {
|
||||
print "Success.\n";
|
||||
exit 0;
|
||||
} elsif ($res eq "CANT") {
|
||||
print "Error: can't move from $from to $to. Destination not yet full? See usage docs.\n";
|
||||
exit;
|
||||
} elsif ($res eq "BUSY") {
|
||||
if (++$tries == 3) {
|
||||
print "Failed to move after 3 tries. Try again later.\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
print "Page busy, retrying...\n";
|
||||
sleep 1;
|
||||
}
|
||||
}
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
# display mode:
|
||||
|
||||
my %items; # class -> { number, age, chunk_size, chunks_per_page,
|
||||
# total_pages, total_chunks, used_chunks,
|
||||
# free_chunks, free_chunks_end }
|
||||
|
||||
print $sock "stats items\r\n";
|
||||
while (<$sock>) {
|
||||
last if /^END/;
|
||||
if (/^STAT items:(\d+):(\w+) (\d+)/) {
|
||||
$items{$1}{$2} = $3;
|
||||
}
|
||||
}
|
||||
|
||||
print $sock "stats slabs\r\n";
|
||||
while (<$sock>) {
|
||||
last if /^END/;
|
||||
if (/^STAT (\d+):(\w+) (\d+)/) {
|
||||
$items{$1}{$2} = $3;
|
||||
}
|
||||
}
|
||||
|
||||
print " # Item_Size Max_age 1MB_pages Full?\n";
|
||||
foreach my $n (6..17) {
|
||||
my $it = $items{$n};
|
||||
my $size = $it->{chunk_size} < 1024 ? "$it->{chunk_size} B" :
|
||||
sprintf("%d kB", $it->{chunk_size} / 1024);
|
||||
my $full = $it->{free_chunks_end} == 0 ? "yes" : " no";
|
||||
printf "%3d %6s%7d s %7d $full\n", $n, $size, $it->{age}, $it->{total_pages};
|
||||
}
|
||||
|
||||
117
wcmtools/memcached/scripts/start-memcached
Executable file
117
wcmtools/memcached/scripts/start-memcached
Executable file
@@ -0,0 +1,117 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# start-memcached
|
||||
# 2003/2004 - Jay Bonci <jaybonci@debian.org>
|
||||
# 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 $params; my $etchandle; my $etcfile = "/etc/memcached.conf";
|
||||
|
||||
# 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/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 ||= "";
|
||||
$line =~ s/\#.*//g;
|
||||
$line =~ s/\s+$//g;
|
||||
$line =~ s/^\s+//g;
|
||||
next unless $line;
|
||||
next if $line =~ /^\-[dh]/;
|
||||
|
||||
if($line =~ /^[^\-]/)
|
||||
{
|
||||
my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/;
|
||||
$conf_directives->{$directive}->($arg);
|
||||
next;
|
||||
}
|
||||
|
||||
push @$params, $line;
|
||||
}
|
||||
|
||||
}else{
|
||||
$params = [];
|
||||
}
|
||||
|
||||
push @$params, "-u root" unless(grep "-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);
|
||||
|
||||
}else{
|
||||
if(open PIDHANDLE,">$pidfile")
|
||||
{
|
||||
print PIDHANDLE $pid;
|
||||
close PIDHANDLE;
|
||||
}else{
|
||||
|
||||
print STDERR "Can't write pidfile to $pidfile.\n";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user