достаёт юзеров 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$   



 
 
 


