достаёт юзеров ispmanager, вызывает ps - снять статистику по процессам, записывает результаты в файл.
смущает время работы:
Код: Выделить всё
0.82 real 0.50 user 0.17 sys
Код: Выделить всё
srv$ cat /root/scripts/work/resource.usage.pl
#!/usr/bin/perl -w
# пеерписываение одноменнёого срипта на шелле.
# начато 2009-03-12 в 20:44
# цель - ускорить работу и уточнить статистику.
# от rrd, пока отказываюсь, перл с ним работать умеет, но я - нет =)
$txt_bases_preffix="/var/db/resusage/txt/" . print_year(time()) . "/" . print_month(time()) . "/" . print_day(time());
# проверяем наличие директории, если надо - создаём.
if ( -d $txt_bases_preffix ){ # есть директория
}else{ # есть директория --> нет директории
`/bin/mkdir -m 0751 -p $txt_bases_preffix`
}
# /bin/ps -axo user,%cpu,%mem | /usr/bin/awk '{print $1, $2, $3}' | /usr/bin/sort
# дёргаем список процессов
open (MYPS, "/bin/ps -axo user,%cpu,%mem |");
# сохраняем список процессов в массив
@list_proc = <MYPS>;
# закрываем
close MYPS;
#foreach $stroka ( @list_proc ){ print "строка = $stroka\n";}
#exit;
# grep Account /usr/local/ispmgr/etc/ispmgr.conf | awk '{print $2}' | sed 's/"//g'
# дёргаем список юзеров
open (MYTMP, "/usr/local/ispmgr/etc/ispmgr.conf");
# сохраняем в массив содержимое - построчно
@tmp = <MYTMP>;
# закрываем
close MYTMP;
#my @user_list;
# перебираем массив строк из MYTMP. Надо достать зверьков
# # в отдельный массив
foreach $stroka ( @tmp )
{
($tmp1,$user_name) = split('\s', $stroka);
if($tmp1 eq "Account"){
if($user_name =~ /^"h\d+"$/){
# имя пользователя
$user_name =~ s/\"//g;
# время ЦПУ
my $cpu = 0;
# сколько процентов рамы
my $ram = 0;
# Сколько процессов запущщено
my $proc = 0;
# запускаем перебор массива процессов.
foreach $line ( @list_proc ){
($tmp_user, $tmp_cpu, $tmp_ram) = split('\s+', trim($line));
if($tmp_user eq $user_name){
#print "$line = $tmp_user ; $tmp_cpu ; $tmp_ram\n";
$cpu = $cpu + $tmp_cpu;
$ram = $ram + $tmp_ram;
$proc = $proc + 1;
} # закрытие - в строке данные по пользователю
} # закрытие перебора процессов по данному зверьку
#print "$user_name = $cpu $ram $proc\n";
# открываем файл со статистикой на дозапись
open (LOGFILE, ">>$txt_bases_preffix/$user_name.all.txt");
print LOGFILE $cpu . " " . $ram . " " . $proc . "\n";
close LOGFILE;
} # закрытие имя юзера попадает под шаблон
} # закрытие - строка описания аккаунта
} # закрытие перебора конфига ispmgr.conf
# functions
sub trim {
my($string)=@_;
return $string unless $string;
for ($string) {
s/^\s+//;
s/\s+$//;
}
return $string;
}
sub print_date {
my ($date) = @_;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
return (1900 + $year) . "-" . sprintf("%02u", ++$mon) . "-" . sprintf("%02u", $mday);
}
sub print_year {
my ($date) = @_;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
return (1900 + $year);
}
sub print_month {
my ($date) = @_;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
return sprintf("%02u", ++$mon);
}
sub print_day {
my ($date) = @_;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($date);
return sprintf("%02u", $mday);
}
srv$