рдиреЗрдЯрд╡рд░реНрдХ рдЙрдкрдХрд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ SVN рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛

рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдХрд╛рд░рдг, рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдФрд░ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рд╕реМрдВрдкреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╢реНрд░реЗрдгреА, рдЗрд╕рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдФрд░ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред
рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдерд╛ред рдЪреБрдирд╛рд╡ рддреЛрдбрд╝рдлреЛрдбрд╝ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдЬрд┐рд╕реЗ рдПрд╕рд╡реАрдПрди рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрдИ рдкреГрд╖реНрда рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЧреИрд░-рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ рдЙрдкрдХрд░рдг рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрди рдХреА рдореЗрд░реА рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдПрдХ рд╡рд░реНрдХрд┐рдВрдЧ рдХреЙрдкреА рдмрдирд╛рдПрдВ, рдЬрд╣рд╛рдВ рдкреЗрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдХреЙрдиреНрдлрд┐рдЧ рдХрд▓реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
svn checkout svn://svn.reposerver.ru/configs /configs

рдЪрд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдЪрд░ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн:
 #!/usr/bin/perl -w use Net::Appliance::Session; use Net::SCP::Expect; use Switch; use Fcntl ':flock'; exit(1) unless &lock("lockfile"); my $date = `/bin/date`; my $flag=0; ###    my $path="/configs"; ###    my $cfg = "/configs/switches.cfg"; ###    my $error = "\n"; ###    . 

рд╣рдо рдПрдХ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╢реЛрдзрди рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
 $_=`/usr/local/bin/svn update $path`; s/At revision (\d+)./$1/; $prev_rev = $_; 

рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЙрдХ / рдЕрдирд▓реЙрдХ рдХрд░реЗрдВред рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
 sub lock($) { open(LK,">$_[0]") or return 0; flock(LK,LOCK_EX|LOCK_NB); } sub unlock($) { unlink($_[0]); flock(LK,LOCK_UN); close(LK); } 

рдЕрдЧрд▓рд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реЗрдВред рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдХреЛрд▓рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд▓реЛрд╣реЗ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ:
switch1:e
switch2:cat
router1:c
router2:j

 open (CFG, "$cfg") || die "Cant open file $cfg: $!"; while (<CFG>) { next if /^\#/; ###    next if /^\s*$/; ###     chomp; my @host = split /:/,$_; switch($host[1]) { case "cat" { `/usr/bin/touch $path/$host[0]`; &cat_telnet($host[0]); &str_remove ($host[0]); } case "c" { `/usr/bin/touch $path/$host[0]`; &cat_telnet($host[0]); &str_remove ($host[0]); } case "e" { `/usr/bin/touch $path/$host[0]`; &extreme_telnet($host[0]); &str_remove ($host[0]); } case "j" { &juni_scp($host[0]); } } 

рдпрд╣рд╛рдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ (рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдерд╛) рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХреЙрд▓ рдХрд░реЗрдВред рд╣рдо рдмрд╛рдж рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЗрдХрдЯреНрдареЗ рдПрдХ рдирдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛрдЧрд╛ред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рд╣реИрдВред рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЭрдВрдбрд╛ рд╣реИ, рддреЛ рдХрдорд┐рдЯ рдХрд░реЗрдВ рдФрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдХреЛрдИ рдирдпрд╛ рд╣реЛрд╕реНрдЯ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде, рдПрдХ рдкрддреНрд░ рд▓рд┐рдЦреЗрдВред
 my $svnst = `/usr/local/bin/svn status $path/$host[0]`; if ($svnst =~ /^M/) { ###     $flag=1; `/usr/local/bin/svn commit -m "$date" $path/$host[0]`; } if ($svnst =~/^\?/) { ###     `/usr/local/bin/svn add $path/$host[0]`; `/usr/local/bin/svn commit -m "Add new host at $date" $path/$host[0]`; } } close CFG; if ($flag==1) { &diff_mail(); } 

рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред рдЖрдЧреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕реЗрдЯред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдЧреНрд░рд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд▓реНрдЯреА-рд╡реЗрдВрдбрд░ рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг, рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рд┐рдЪ рдФрд░ рдПрдХ рдХрдорд╛рдВрдбред
 sub cat_telnet { (my $host1)=@_; $try = 5; $update='false'; while ($try>0) { my $s = Net::Appliance::Session->new( Host => $host1, Transport => 'Telnet', Timeout => 50, Source => '/configs/nas-pb.yml', Platform=> 'IOS' ); eval { $s->do_login(); $s->connect( Name => 'username', Password => 'pass', ); my @temp = $s->cmd('show run'); }; if ($#temp>5) { $s->close; $update='true'; last; } $try=$try-1 ; if ($try==0) { $error = $error.┬╗Some error occure while getting config from ┬л. $host1. ┬л\n┬╗; $flag=1; } $s->close; } if ($update eq 'true'){ open (CFG1, ┬л>$path/$host1┬╗) || die ┬лCant open file $path/$host1: $!┬╗; print CFG1 @temp; close CFG1; } } 

рдХрдиреЗрдХреНрд╢рди рдФрд░ рдХрдорд╛рдВрдб рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдХрд╛рд╕рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд░реИрд╢ рди рд╣реЛред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╛рдБрдЪ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдпрд╛рд╕ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо рдпрд╛ рддреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рд╣рдо рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рддреНрд░реБрдЯрд┐ рдореЗрд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗ) рдпрд╛ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗрдВред рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЙрдкрдХрд░рдг рд╕рдордп-рд╕рдордп рдкрд░ рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ: "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдмрд╛рдж рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ" рдЬрдм рд╡реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд╕рдВрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдХрдиреЗрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднреА рдХреЛрдИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЪреЗрдХ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИред
рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреБрдирд┐рдкрд░:
 sub juni_scp { (my $host1)=@_; $try = 5; $update = 'false'; while ($try>0) { my $s = Net::SCP::Expect->new( user=>'username', password=>'pass', auto_yes=>1 ); eval { my @temp= $s->scp("$host1:/config/juniper.conf.gz","$path/$host1.gz" ); }; if ($#temp eq "0") { $update='true'; last; } $try=$try-1 ; if ($try==0) { $error = $error."Some error occure while getting config from ". $host1. "\n"; $flag=1; } } if ($update eq 'true'){ `/usr/bin/gunzip -f $path/$host1.gz`; } } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЯреЗрд▓рдиреЗрдЯ рдХреЗ рдмрдЬрд╛рдп, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реНрдХреИрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реАрдорд┐рдд рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реЗрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрднреА-рдХрднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓ рд░рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд░реНрде рд▓реЛрдб рдирд╣реАрдВ рд▓реЗрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдХреЛ рдореЗрдВ ntp рдХреНрд▓реЙрдХ-рдкреАрд░рд┐рдпрдб, рдпрд╛ рдЕрддреНрдпрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рди рд╣реЛрдиреЗ рдкрд░ рдЖрдордВрддреНрд░рдг рдореЗрдВ рддрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдо рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рдРрд╕реА рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдХрд╛рдЯрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдФрд░ рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛:
 sub str_remove { (my $host)=@_; open (F,"$path/$host") ; my @f = <F>; close F; open (F, ">$path/$host"); foreach $str (@f) { print F $str if ( $str !~ /^ntp clock-period/ and $str !~ /^Current configuration/ and $str !~ /^Slot-/ and $str !~ /^\* Slot-/ and $str !~ /^\*/); } close F; } 

рд╣рдорд╛рд░реА рд╕реВрдЪреА рд╕реЗ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рдИ-рдореЗрд▓ рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдзреНрд╡рдЬ рдХрд╣реАрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдо рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдорд╛рдирдХ svn рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдкрд┐рдЫрд▓реЗ рд╕рдВрд╢реЛрдзрди рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред
 sub diff_mail { @mail = `/usr/local/bin/svn diff $path -r $prev_rev`; open (MAIL, "| /usr/sbin/sendmail user@mydomain.ru, user2@mydomain.ru ") || die " $!"; print MAIL <<EOF; From: Config Checker Subject: Config Update @mail $error EOF close MAIL; } 

рдЕрдВрдд рдореЗрдВ, рд▓реЛрдлрд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
 &unlock("lockfile"); 

рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд┐рди рдореЗрдВ рдХрдИ рдмрд╛рд░ рддрд╛рдЬ рдкрд░ рдЪрд▓рддреА рд╣реИред рдХрд┐рдП рдЧрдП рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдореЗрд▓ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдЖрдк рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдПрд╕рд╡реАрдПрди рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд░реЛрд▓ рдмреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред
рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдПрдХ рдореЛрддреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧреБрд░реБ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕рд▓рд╛рд╣ рдХреЛ рдХреГрддрдЬреНрдЮрддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


Source: https://habr.com/ru/post/In124863/


All Articles