Perl - exemples
Aller à la navigation
Aller à la recherche
Affiche une table de multiplication (passage de paramètre, regexp)
#!/usr/bin/perl # Affiche une table de multiplication. use strict; use warnings; my $nb; # Le nombre dont on veut afficher la table. # Teste si on a passe le nombre en parametre, sinon le demande. if ($ARGV[0]) { $nb = $ARGV[0]; } else { print "Quelle table de multiplication voulez-vous afficher ? "; $nb = <>; } # On supprime le saut de ligne pour l'affichage chomp $nb; # On vérifie que $nb est bien une valeur numérique (on autorise les nb negatifs et a virgule). if (!($nb =~ /^(\-)?\d+(\.\d*)?+$/)) { die 'Erreur : "' . $nb . '"' . " n'est pas un nombre.\n"; } # On affiche la table for(my $i = 1; $i <= 10; $i++) { print "$nb x $i = " . $nb * $i . "\n"; }
Recherche et compresse un fichier
#!/usr/bin/perl # # 2013-03-19 : author@domain # This script search for last month Oracle backup log. # If this file exist, the script compress it. If not, do nothing. ## Variables my $log_path = "/apps/oracle/backup/log/"; my $hostname = `hostname`; chomp($hostname); ## Determines last month number (two digits) ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(time); $month += 1; $year += 1900; $p_year = $year; $prev_month = $month -1; if ($prev_month == 0) { $prev_month = 12; $p_year = $year -1; }; $prev_month = sprintf("%02d",$prev_month); ## Test if log file exist and compress it my $log_file = $log_path.$hostname."_".$prev_month.".lst"; if (! -e $log_file ) { print "ERROR: log file '$log_file' not found.\n"; print "Aborting.\n"; exit 2; } else { print "Log file '$log_file' found.\nCompressing.\n"; `gzip $log_file`; if ( $? != 0 ) { print "ERROR: unable to gzip $log_file.\nAborting.\n"; exit 2; } `mv $log_file".gz" $log_file.$p_year".gz"`; if ( $? != 0 ) { print "Warning: unable to rename $log_file."; } print "Done.\n"; };
Solaris - consommation mémoire et cpu d'une liste de process
Le script suivi prend une liste de process (variable @list) et renvoie pour chacun le nombre de processus trouvés, ainsi que la somme des consommations mémoire et cpu. Le tout est retourné au format nagios. D'ailleurs, le template pnp4nagios correspondant est visible dans ce wiki.
#!/usr/bin/perl # # Script de surveillance pour nagios # Affiche la consommation memoire et cpu des process sas, ainsi que # leur nombre. # ###################### Variables ################################# my $mem = ""; my $cpu = ""; my %mem_total; my %cpu_total; my %nb_proc; my $status = 0; my @list = ("sasexe", "sasauth", "elssrv"); my $text = "Status Ok"; my $perf_data = ""; ################################################################## # Programme principal # ################################################################## my @ps = `ps -edf`; foreach my $re_proc(@list) { my @process = grep(/$re_proc/, @ps); $nb_proc{$re_proc} = scalar(@process); $mem_total{$re_proc} = 0; $cpu_total{$re_proc} = 0; foreach my $ps_line(@process) { # On supprime les espaces en debut et en fin $ps_line =~ s/(^\s+|\s+$)//; # Recuperation des infos sur les process my($user, $pid, $ppid) = split(/\s+/, $ps_line); # Lancement d'un prstat my $cmd = "prstat -p $pid 1 1"; my @prstat = `$cmd`; # Recuperation de la ligne qui nous interesse et decoupage my @info = split(/\s+/, $prstat[1]); my($mem, $cpu) = ($info[3], $info[9]); # Realignement de la memoire en octet my $unit_count = 1024; foreach my $unit("K", "M", "G", "T") { if($mem =~ /(\d+)$unit$/) { $mem = $1 * $unit_count } $unit_count *= 1024; } $mem_total{$re_proc} += $mem; $cpu_total{$re_proc} += $cpu; } } foreach my $re_proc(@list) { $perf_data = $perf_data."cpu_$re_proc=".$cpu_total{$re_proc}." mem_$re_proc=".$mem_total{$re_proc}." nb_proc_$re_proc=".$nb_proc{$re_proc}." "; } print $text."|".$perf_data."\n"; exit $status
Exemple de résultat :
Status Ok|cpu_sasexe=11 mem_sasexe=5545918464 nb_proc_sasexe=40 cpu_sasauth=0 mem_sasauth=13516800 nb_proc_sasauth=3 cpu_elssrv=0 mem_elssrv=107380736 nb_proc_elssrv=37