Скрипт может оказаться полезным, особенно на серверах где одновременно выполняется большое количество процесов (когда глядя на вывод ps aux приходится многократно прокручивать экран и трудно понять кто-же сколько потребляет в эту секунду).
Вот собственно скрипт:
#!/usr/bin/php -nd safe_mode=Off <? if(@$_SERVER['argv'][1]=='h' || @$_SERVER['argv'][1]=='-h' || @$_SERVER['argv'][1]=='--help'){ die("Use:\n\nups m|p|c\n\nOPTIONS:\n\nm - sort by %mem\np - sort by process\nc - sort by %cpu (if no options script use default option as c)\n\nUse:\nups --help\nfor see this help information\n"); } echo "\nUse: \"ups --help\" for see help information\n"; echo 'Uptime: '.exec('uptime')."\n\n"; if(@exec('/bin/ps aux',$pss)){ $tasks=sizeof($pss); echo 'Running Tasks: '.$tasks."\n"; for($i=1; $i<$tasks; $i++){ preg_match("/([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}([^ ]{1,})[ ]{1,}(.*)/i",$pss[$i],$arr); $user=$arr[1]; $pid=$arr[2]; $cpu=$arr[3]; $mem=$arr[4]; $vsz=$arr[5]; $rss=$arr[6]; $tt=$arr[7]; $stat=$arr[8]; $started=$arr[9]; $time=$arr[10]; $command=$arr[11]; list($time_h,$time_m)=split(':',$time); if(!isset($u[$user])){ $u[$user]['process']=1; $u[$user]['cpu']=$cpu; $u[$user]['mem']=$mem; $u[$user]['vsz']=$vsz; $u[$user]['rss']=$rss; $u[$user]['time_h']=$time_h; $u[$user]['time_m']=$time_m; }else{ $u[$user]['process']++; $u[$user]['cpu']=($u[$user]['cpu']+$cpu); $u[$user]['mem']=($u[$user]['mem']+$mem); $u[$user]['vsz']=($u[$user]['vsz']+$vsz); $u[$user]['rss']=($u[$user]['rss']+$rss); $u[$user]['time_h']=($u[$user]['time_h']+$time_h); $u[$user]['time_m']=($u[$user]['time_m']+$time_m); } } $users=sizeof($u); echo 'Active Users: '.$users."\n\nUSER \t\tPROCESS\t%CPU\t%MEM\tVSZ\t\tRSS\t\tTIME\n"; foreach($u as $user => $vars){ $vars['time_m']=trim($vars['time_m']); $vars['time_h']=trim($vars['time_h']); if($vars['time_m']>60){ while($vars['time_m']>=60){ $vars['time_m']=($vars['time_m']-60); $vars['time_h']++; } } if(@$_SERVER['argv'][1]=='m'){ $sort=trim($vars['mem']); }elseif(@$_SERVER['argv'][1]=='p'){ $sort=trim($vars['process']); }else{ $sort=trim($vars['cpu']); } $uarr[trim($user)." \t\t".trim($vars['process'])."\t".trim($vars['cpu'])."\t".trim($vars['mem'])."\t".trim($vars['vsz'])."\t\t".trim($vars['rss'])."\t\t".trim($vars['time_h']).':'.trim($vars['time_m'])."\n"]=$sort; } arsort($uarr); reset($uarr); foreach($uarr as $k => $v){ echo $k; } }else{ echo 'Sorry, but your PHP configuration must alowe use "exec()" function in this php-scripts, and this script need safe_mode=off - try edit your php.ini file and mooved this script in /home directory'; } echo "\n"; ?> |
Установка скрипта проста до безобразия — создайте файл ups и скопируйте в него вышеприведенный код скрипта. Первая строка (#!/usr/bin/php -nd safe_mode=Off) должна быть в самом начале, до нее не должно быть никаких пробелов или переносов строки.
Дайте скрипту права на выполнение:
chmod u+x ups
Запускать скрипт так:
./ups
(вывод суммарных показателей с сортировкой по %CPU)
./ups -m
(вывод с сортировкой по %MEM)
./ups -p
(вывод с сортировкой по количеству процессов юзера)
Если при запуске скрипта получаете ошибку типа «No input file specified.» — переместите скрипт в директорию /home или в директорию /home/юзер/public_html (данная ошибка означает что не разрешен запуск скрипта из текущей директории, поэтому необходимо перенести его в директорию откуда разрешен запуск php-скриптов).
Для того чтобы облегчить запуск (сделать запуск по команде ups), можно создать сылку на скрипт в директории /usr/bin, например:
ln -s /home/юзер/ups /usr/bin/ups
P.S. Любителям чистоты кода просьба не пинать за строки с 15-ой по 42-ую — строки были созданы в процесе написания исключительно мне в качестве памятки, их избыточность прекрасно осознаю.