auto start all xen servers
#!/bin/bash
sleep 10
VMS=(news-db vweb1 vweb2 vweb3 vweb4 bwin01)
for vm in ${VMS[@]}
do
if [ -e "/etc/xen/$vm" ] # Check if file exist
then
data=`date '+%d/%m/%Y - %H:%M:%S'` # Current date/time (log purposes)
echo "starting at: $data -- $vm"
#######/usr/sbin/xm create $vm # Create VM
#######sleep 15 # Wait 15 sec to start the next
echo
continue # Next VM
fi
echo "Nothing to be done..."
done
exit 0
Back up script in perl using rsync , File::Find and Archive::Tar
the Following is a back up script to take back up from remote servers using rsync
The script can do the following :
1) reads config file , check the config file if the remote file exists
2) does an rsync of remote dir to backupServer
3) does a tar of the back up in archive dir of the backup server
4) remove all files that are 60 days older ( currently disabled )
5) sends a mail in case any errors
-------------------------------------------------------
this is your /script/backup_scripl.pl
-------------------------------------------------------
#!/usr/bin/perl
use strict ;
use warnings;
use Data::Dumper ;
use Net::SMTP;
use File::Find;
use Archive::Tar;
######################################
our %Config;
require('/<PATHTOCONFIFFILE>/config_backup.pl');
my $F1 ='/var/www/projects/';
my $F2 ='/backup/apps/DocRoot/';
my $ARCH ='/backup/apps/DocRoot/archive/';
my $today = `date +%F`; chomp($today);
my $now =`date +%d%b-%H:%M`; chomp($now);
my $log ="/backup/docroot-backup1.log";
my $KEY ="/opt/.securekey/id_rsa";
my $RCPT ='systemadmin@yourdomain.com';
my $commonip = '10.0.1.' ;
my $hostname =`hostname -i`; chomp($hostname);
unless ( -e $F2 ) {
sendemail("ALERT - DocRoot Backup - Storage Path ABSENT ","Storage location $F2 was not found in the system at `date`. \nTerminating DocRoot backup process at stage1. \nServer is $hostname");
logit(" Backup Alert - $F2 STOR ABSENT");
exit ;
}
unless ( -e $F2 ) {
sendemail("ALERT - DocRoot backup Alert - Write Error on storage","Apparently I CANNOT write to $F2/testtouch on `date`. \nTerminating backup process at stage1.\nServer is $hostname ");
logit(" Backup Alert - storage is probably readonly. Cannot write to $F2 ");
exit;
}
logit("---------------------------- START TIME $now ---------------------------------------- ");
foreach my $web ( keys %Config ) {
logit(" Start server $web");
foreach my $server( keys %{$Config{$web}} ) {
print "/usr/bin/rsync -e \"ssh -i $KEY \" --delete -au root\@$commonip$server:$Config{$web}{$server}[1]$Config{$web}{$server}[0] $F2$Config{$web}{$server}[0].$server.proj\n" ;
system("/usr/bin/rsync -e \"ssh -i $KEY \" --delete -au root\@$commonip$server:$Config{$web}{$server}[1]$Config{$web}{$server}[0] $F2$Config{$web}{$server}[0].$server.proj") ;
logit("$F2$Config{$web}{$server}[0].$server.proj Rsync completed ... ");
}
logit(" End server ") ;
}
foreach my $web ( keys %Config ) {
foreach my $server ( keys %{$Config{$web}} ) {
if ( -e "$F2$Config{$web}{$server}[0].$server.proj" ) {
if ( chdir("$F2$Config{$web}{$server}[0].$server.proj") ) {
print " tar --use=lbzip2 -c -f $ARCH$Config{$web}{$server}[0].$server.proj-$today.tbz2 . 2>/dev/null \n";
system("tar --use=lbzip2 -c -f $ARCH$Config{$web}{$server}[0].$server.proj-$today.tbz2 . 2>/dev/null");
if ( $? == 0 ) {
logit("Archive of $F2$Config{$web}{$server}[0].$server.proj to $ARCH$Config{$web}{$server}[0].$server.proj-$today.tbz2 success");
}else{
logit("Archive of $F2$Config{$web}{$server}.$server.proj failed") ;
sendemail("ALERT - DocRoot backup Alert - Archive Fail", "$now :[STAGE - 2, Server = $hostname ] -- Archive of $F2$Config{$web}{$server}[0]\.$server\.proj failed.\nPlease check manually.\nPossible failure due to bad ecit status. Continuing with remaining process." );
}
} else {
logit("NO Dir $F2$Config{$web}{$server}[0].$server.proj ") ;
}
}else {
sendemail("ALERT - DocRoot backup Alert - Archiving Failed","Archiving of $F2$Config{$web}{$server}[0]\.$server\.proj failed $now \nTerminating backup process at stage2-Archiving.\nServer is $hostname ");
logit("-- Compression Failed....Not Found $F2/$Config{$web}{$server}[0]\.$server\.proj ");
}
}
}
logit("---------------------------- END TIME $now ---------------------------------------- ");
# purge backups older than AGE in days
my @file_list;
my @find_dirs = ($ARCH); # directories to search
my $now_time = time(); # get current time
my $days = 60; # how many days old
my $seconds_per_day = 60*60*24; # seconds in a day
my $AGE = $days*$seconds_per_day; # age in seconds
find ( sub { my $file = $File::Find::name;
if ( -f $file ) {
push (@file_list, $file);
}
}, @find_dirs);
for my $file (@file_list) {
my @stats = stat($file);
if ($now_time-$stats[9] > $AGE) {
#unlink $file;
print "unlink $file\n";
}
}
sub sendemail {
#usage sendemail("subject","mssg");
my $from = 'backupserver@yourdomain.com' ;
my $sub = $_[0] ;
my $content = $_[1] ;
my $to = $RCPT ;
my $relayhost = '10.0.0.22' || '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 =`date +%d%b-%H:%M:%S` ;
chomp($logtimestamp);
print "$s\n";
my $fh;
open($fh, '>>', "$log") or die "$log: $!";
print $fh "$logtimestamp : $s\n";
close($fh);
}
------------------------------------------------------------------------------------------------------------------
this is the config file -- /script/config_backup.pl
------------------------------------------------------------------------------------------------------------------
#!/usr/bin/perl
%Config = (
'site1.domain.com' => {'23 => ['site1-domain','/var/www/html/'] },
'ontravel1.domain.com' => {'25' => ['ontravel1','/var/www/html/'] },
) ;
**** use on your own risk
shell script for website deployment through git or svn
This summary is not available. Please
click here to view the post.
extract data from html table using HTML::TableExtract
in this tutorial you will get to learn :
1) How to extract data from a html table
2 ) regex
3) appending a hash to a hash
4) for loops
----------------------------------------------------------------------------------------------
HTML file
----------------------------------------------------------------------------------------------
<table class="table1" border="1" cellspacing="1" cellpadding="1" style="width: 1144px; height: 883px;">
<tr>
<td> <b>Dom0<br /></b>
</td><td> <b>DomU <br /></b>
</td><td> <b>ipaddress<br /></b>
</td><td> <b>server name <br /></b>
</td><td> <b>application <br /></b>
</td><td> <b>website <br /></b>
</td><td> <b>assigned to </b><br />
</td></tr>
<tr>
<td> S1 (1.51)<br />
</td><td> yourwebsitenews-db 10GB ram 100 GB HDD
</td><td> 1.0.0.101<br />
</td><td> yourwebsitenews-db
</td><td> win2k8 ,sql
</td><td> MSSQL Server
</td><td> yourwebsitenews
</td></tr>
<tr>
<td> <br />
</td><td> yourwebsitetvweb3 4GB ram 48 GB HDD<br />
</td><td> 9.9.02.132<br />
</td><td> yourwebsitetvweb3<br />
</td><td> win2k8,IIS<br />
</td><td> yourwebsite TV <br />
</td><td> yourwebsitetv<br />
</td></tr>
<tr>
<td> <br />
</td><td> yourwebsitetvweb4 4GB ram 30 GB HDD<br />
</td><td> 9.9.202.146<br />
</td><td> yourwebsitetvweb4<br />
</td><td> win2k8,IIS<br />
</td><td> yourwebsite TV <br />
</td><td> yourwebsitetv<br />
</td></tr>
<tr>
<td> <br />
</td><td> <br />
</td><td> <br />
</td></tr>
<tr>
<td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td></tr>
<tr>
<td> S2 (1.52) <br />
</td><td> web1 5.5GB ram 50GB hdd<br />
</td><td> 1.0.0.106<br />
</td><td> web1 <br />
</td><td> apache,php,memcache<br />
</td><td> someweb,cndas,lms.someweb.com<br />
</td><td> IWPL
</td></tr>
<tr>
<td> <br />
</td><td> web4 5.5GB ram 50GB hdd<br />
</td><td> 1.0.0.109<br />
</td><td> web4<br />
</td><td> apache,php,memcache<br />
</td><td> IWPL
</td></tr>
<tr>
<td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td></tr>
<tr>
<td> S3 (1.53) <br />
</td><td> DB1 11GB ram 100GB hdd <br />
</td><td> 1.0.0.111<br />
</td><td> db1<br />
</td><td> mysql <br />
</td><td> all commons (auth ),someweb<br />
</td><td> IL
</td></tr>
<tr>
<td> <br />
<tr>
<td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td></tr>
<tr>
<td> S4 (1.54) <br />
</td><td> DB3 10GB ram 200GB hdd<br />
</td><td> 1.0.0.116<br />
</td><td> db3<br />
</td><td> mysql <br />
</td><td> ors_db,ls_ting
</td><td> IWPL
</td></tr>
<tr>
<td> <br />
</td><td> yourwebsitetvmemcach-1 10 Gb ram 24 Gb hdd<br />
</td><td> 9.9.202.134<br />
</td><td> yourwebsitetvmem-1<br />
</td><td> yourwebsite Tv Memcached Server-1<br />
</td><td> yourwebsite Tv Memcached Server-1<br />
</td><td> yourwebsitetv
</td></tr>
<tr>
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td></tr>
<tr>
<td> S5 (1.55)<br />
</td><td> 1 systems ops 8GB 100GB <br />
</td><td> 1.0.0.121<br />
</td><td> ops<br />
</td><td> mysql,php,apache<br /><br />
</td><td> odw <br /> opsview <br /> reports <br /> runtime <br />
</td><td> IWPL
</td></tr>
<tr>
<td> <br />
<td> <br />
<td> <br />
</td><td> cache 4GB ram 129GB hdd<br />
</td><td> 9.9.202.209<br />
</td><td> linux-yourwebsite<br />
</td><td> php,apache<br />
</td><td> yourwebsite <br />
</td><td> yourwebsitetv
</td></tr>
<tr>
<td> <br />
</td><td> cache 6GB ram 20GB hdd<br />
</td><td> 1.0.0.125<br />
</td><td> cache-9<br />
</td><td> backup server
</td><td> backup server
</td><td> IL
</td></tr>
<tr>
<td> <br />
</td><td> web16- 5 GB RAM 46GB HDD
</td><td> 1.0.0.103
</td><td> web16
</td><td> php,apache
</td><td> voiofa.com,solr instance
</td><td> Il
</td></tr>
<tr>
<td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td><td> <br />
</td></tr>
<tr>
<td> S6 (1.56) <br />
</td><td> web9 5GBram <br />
</td><td> 1.0.0.126<br />
</td><td> web9 <br />
</td><td> apache,php,memcache<br />
</td><td> Il
</td></tr>
<tr>
<td> <br />
</td><td> web10 <br />
</td><td> 1.0.0.127<br />
</td><td> web10<br />
</td><td> apache,php,memcache<br />
</td><td> hea.ia.com,esults.ia.com
</td><td> Il
</td></tr>
<tr>
<td> <br />
</td><td> r1s6v1web13 5-GB ram - 50-GB hdd<br />
</td><td> 1.0.0.129<br />
</td><td> web13<br />
</td><td> apache,php,memcache
</td><td> critry,m.try,admin.ccry.com
</td><td> IL
</td></tr></table>
==================================================================
PERL script
==================================================================
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use LWP::Simple;
use HTML::TableExtract;
#host your table on a local site
my $url = 'http://site2.int.com/table_tmp1.html';
my @data = get_data($url) ;
shift(@data);
my %serverdata;
my %serverdata_sub;
my $DOM0;
my @aeey;
my $re1='((?:[a-z][a-z]*[0-9]+[a-z0-9]*))'; # Alphanum 1
my $re2='(\\s+)'; # White Space 1
my $re3='\\((.*)\\)'; # Round Braces 1
foreach my $y (@data) {
next unless ($y->[2]);
$DOM0 = ($y->[0])? $y->[0] : $DOM0;
my $re=$re1.$re2.$re3;
($DOM0 = $DOM0) =~ s/$re/172.16.$3/isg; # S1 (1.51)
# Dom0 DomU ipaddress server name application website assigned to
# "$DOM0 -----> $y->[2] ========== > $y->[1], $y->[3], $y->[4] $y->[5] $y->[6]
";
push (@{$serverdata{$DOM0}{$y->[2]}}, { 'serverdetails' => $y->[1] , 'servername' => $y->[3], 'application' => $y->[4] , 'websites' => $y->[5] } ) ;
if ( $y->[0] ) {
$DOM0= "$y->[0]";
}else {
$DOM0 = $DOM0;
}
}
foreach my $keysi ( keys %serverdata) {
print "================== $keysi ===============\n";
print Dumper ($serverdata{$keysi}) ;
print "================== ===============\n";
}
sub get_data {
my $sub_url = $_[0];
my $html = get "$sub_url";
my @arry;
my $te = new HTML::TableExtract( depth => 0, count => 0, attribs => { 'class' => "table1" } );
$te->parse($html);
foreach my $ts ($te->tables) {
foreach my $row ($ts->rows) {
# next unless $row->[0] =~ /\w/; # skip garbage rows
@{$row} = grep(s/\n\n|(^\s+|\s+$)//g, @{$row});
push( @arry , [@{$row}] ) ;
# print "$row->[0] , $row->[1],$row->[2],$row->[3]\n";
}
}
return @arry ;
}
Subscribe to:
Posts (Atom)