Advertisement
Guest User

Untitled

a guest
Oct 27th, 2011
464
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.54 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2.  
  3. # start-memcached
  4. # 2003/2004 - Jay Bonci <jaybonci@debian.org>
  5. # This script handles the parsing of the /etc/memcached.conf file
  6. # and was originally created for the Debian distribution.
  7. # Anyone may use this little script under the same terms as
  8. # memcached itself.
  9.  
  10. use strict;
  11.  
  12. if($> != 0 and $< != 0)
  13. {
  14.     print STDERR "Only root wants to run start-memcached.\n";
  15.     exit;
  16. }
  17.  
  18. my $params; my $etchandle; my $etcfile = "/etc/memcached.conf";
  19.  
  20. # This script assumes that memcached is located at /usr/bin/memcached, and
  21. # that the pidfile is writable at /var/run/memcached.pid
  22.  
  23. my $memcached = "/usr/bin/memcached";
  24. my $pidfile = "/var/run/memcached.pid";
  25.  
  26. # If we don't get a valid logfile parameter in the /etc/memcached.conf file,
  27. # we'll just throw away all of our in-daemon output. We need to re-tie it so
  28. # that non-bash shells will not hang on logout. Thanks to Michael Renner for
  29. # the tip
  30. my $fd_reopened = "/dev/null";
  31.  
  32. sub handle_logfile
  33. {
  34.     my ($logfile) = @_;
  35.     $fd_reopened = $logfile;
  36. }
  37.  
  38. sub reopen_logfile
  39. {
  40.     my ($logfile) = @_;
  41.  
  42.     open *STDERR, ">>$logfile";
  43.     open *STDOUT, ">>$logfile";
  44.     open *STDIN, ">>/dev/null";
  45.     $fd_reopened = $logfile;
  46. }
  47.  
  48. # This is set up in place here to support other non -[a-z] directives
  49.  
  50. my $conf_directives = {
  51.     "logfile" => \&handle_logfile,
  52. };
  53.  
  54. if(open $etchandle, $etcfile)
  55. {
  56.     foreach my $line (<$etchandle>)
  57.     {
  58.         $line ||= "";
  59.         $line =~ s/\#.*//g;
  60.         $line =~ s/\s+$//g;
  61.         $line =~ s/^\s+//g;
  62.         next unless $line;
  63.         next if $line =~ /^\-[dh]/;
  64.  
  65.         if($line =~ /^[^\-]/)
  66.         {
  67.             my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/;
  68.             $conf_directives->{$directive}->($arg);
  69.             next;
  70.         }
  71.  
  72.         push @$params, $line;
  73.     }
  74.  
  75. }else{
  76.     $params = [];
  77. }
  78.  
  79. push @$params, "-u root" unless(grep "-u", @$params);
  80. $params = join " ", @$params;
  81.  
  82. if(-e $pidfile)
  83. {
  84.     open PIDHANDLE, "$pidfile";
  85.     my $localpid = <PIDHANDLE>;
  86.     close PIDHANDLE;
  87.  
  88.     chomp $localpid;
  89.     if(-d "/proc/$localpid")
  90.     {
  91.         print STDERR "memcached is already running.\n";
  92.         exit;
  93.     }else{
  94.         `rm -f $localpid`;
  95.     }
  96.  
  97. }
  98.  
  99. my $pid = fork();
  100.  
  101. if($pid == 0)
  102. {
  103.     reopen_logfile($fd_reopened);
  104.     exec "$memcached $params";
  105.     exit(0);
  106.  
  107. }else{
  108.     if(open PIDHANDLE,">$pidfile")
  109.     {
  110.         print PIDHANDLE $pid;
  111.         close PIDHANDLE;
  112.     }else{
  113.  
  114.         print STDERR "Can't write pidfile to $pidfile.\n";
  115.     }
  116. }
  117.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement