Скрипт для проверки загрузки сервера и уведомления при повышенной нагрузке на CPU

в разделе Администрирование | Метки: PHP, Linux

Сегодня от хостера письмо свалилось, что они вынуждены были прибить мой скрипт, т.к. нагрузка превысила 90% в течении 30 минут, в общем я решил написать скрипт, который сам меня будет уведомлять если загрузка превышает к примеру 20%, при этом еще будет показывать список процессов запущенных в данный момент. Скрипт актуален для shared хостинга в основном.

<?php
#!/usr/local/bin/php

<?php

ini_set
('include_path'ini_get('include_path') . PATH_SEPARATOR .
                                
realpath(dirname(__FILE__)) . '/../Zend/library/'
                                
);

setlocale(LC_ALL'ru_RU.UTF-8');
date_default_timezone_set('Europe/Moscow');
require_once(
'Zend/Loader/Autoloader.php');
$loader Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('App_');
$loader->setFallbackAutoloader(true);
$loader->suppressNotFoundWarnings(false);
$emailConfig = array(
                
'auth'      => 'login',
                
'username'  => 'noreply@myhost.ru',
                
'password'  => 'topsecret',
                
'port'      =>  587,
                
'ssl'       => 'tls',);
$notificationEmail 'someemail@email.com';
$smtpHost 'smtp.gmail.com';
$transport = new Zend_Mail_Transport_Smtp($smtpHost$emailConfig);
function 
sendMail($to$subject$body$transport)
{
    
$mail = new Zend_Mail('utf-8');
    
$mail->setBodyHtml($body);
    
$mail->setFrom('noreply@myhost.ru');
    
$mail->addTo($to);
    
$mail->setSubject($subject);
    
$mail->send($transport);
}

exec('whoami'$output);
$username $output[0];
$output = array();
exec("ps -o pcpu -u $username | grep -v CPU"$output);
foreach (
$output as $value)
{
    
$cpuLoad += $value;
}

$output = array();
if (
$cpuLoad 20)
{
    
exec("ps -o pcpu,user,pid,fname,args -u $username"$output);
    
$emailText implode("\n"$output);
    
sendMail($notificationEmail"CPU load on $username is over 20%"$emailText$transport);
}
?>