script to clear php-fpm / restart php-fpm on continuous 503 http error



This script does the following 
1) check whether the site is available 
2) if not available then clear apc cache 
3) if still not available for more thne 5 counts then restart phpfpm and send mail 
4) logging happens at every level

================
#!/usr/bin/perl -w

use strict;
use warnings;
use Data::Dumper; 
use Getopt::Long;
use WWW::Mechanize  ;
use JSON -support_by_pp;
use POSIX qw/ strftime /; 
use Net::SMTP;
my $host  ;
my $string ;
my $mech = WWW::Mechanize->new(timeout => 5);
my $time = strftime("%d-%m-%Y", localtime());
my $log = '/var/log/php-fpm/check_php-fpm.log';

my $file_counter = '/var/log/php-fpm/filecounter';

my $count ; 
if ( eval{ $mech->get($url) } ) {
  logit("OK");
  $count = get_count();
    if ($count  > 0 ) {
      print "setting count to 0\n";   
      $count = '0';
      add_count($count);
    } 

}else{
  $count = get_count();
  add_count($count+1);
  logit("apc FAILED -- removing opcode and users cache -- increasing counter to $count");
  system("curl http://127.0.0.1/clear-apc.php > /dev/null 2>&1 ");
  if ($count  > 4 ) { 
    logit ("restarting php-fpm "); 
    system("/etc/init.d/php-fpm reload");
    sendemail("  Reloading  APC $url [ $time ]  "," Not able to get content for $url , reloading php-fpm [ $time ]");
    print "setting counter back to 0 \n";  
    add_count('0');
  }
}




sub get_count { 
  open my $fh, '<', "$file_counter";
  read $fh, my $string, -s $fh;
  close $fh;
  chomp($string);
  return $string || '0';

}

sub add_count { 
  my $count = shift;
  open my $fh, '>', "$file_counter";
  print $fh $count;
  close $fh;

sub sendemail { 
#usage sendemail("subject","mssg");

  my $from = 'from-email-id' ;
  my $sub = $_[0] ;
  my $content = $_[1] ;
  my $to = 'to-emailid' ;
  my $relayhost = 'mailserver' || 'localhost';

  my $smtp = Net::SMTP->new("$relayhost",
      Debug   => 1,
      );

  $smtp->mail($from);
  $smtp->to($to);
  $smtp->data();
  $smtp->datasend("Subject: $sub");
  $smtp->datasend("\n");
  $smtp->datasend("\n");
  $smtp->datasend("$content");
  $smtp->dataend();
  $smtp->quit();



sub logit {
  my $s = shift;

  my $logtimestamp   = strftime("%d-%m-%Y -- %H:%M:%S", localtime());
  print "$s\n";
  my $fh;
  open($fh, '>>', "$log") or die "$log: $!";
  print $fh "[$logtimestamp] : $s\n";
  close($fh);
}

No comments:

Other Articles

Enter your email address: