Страница 1 из 2

Majordomo и Linux

Добавлено: Вс ноя 29, 2015 11:56 am
Amarok
Переезжаю (медленно, но верно) на linux. Вопрос: в этом руководстве есть такие строки

Код: Выделить всё

sudo apt-get install lm-sensors (пакет для мониторинга температуры системы, частоты вращения кулеров ...)
sudo apt-get install hddtemp (пакет для мониторинга температуры жесткого диска)
 
А как значения сенсоров из hddtemp и lm-sensors передать в Алису?

Re: Majordomo и Linux

Добавлено: Вс ноя 29, 2015 5:45 pm
Anton_kulibin
У меня вот этим сценарием, то что закоменчено, почему то передавало не верные значения, возможно у Вас будет работать.
SPOILERSPOILER_SHOW

Код: Выделить всё

/*exec("sensors",$asensors);
$temp=0;
for($i=0;$i<count($asensors);$i++) {
   ereg("[^:]*\:[ ]*([0-9+-.]*)",$asensors[$i],$arr);
   $temp = trim($arr[1]);
   $temp = str_replace('+','',$temp);
   switch (substr($asensors[$i],0,5)) {
    case 'fan1:':
        sg('system_fan1',$temp);
        break;
    case 'Core0 Temp:':
        sg('system_temp1',$temp);
        break;
    case 'temp1':
        sg('system_temp3',$temp);
        break;
    case 'M/B T':
        sg('system_mbtemp',$temp);
        break;
    };
};*/
$temp=shell_exec("sensors");      
ereg("Core0 Temp[^:]*\:[ ]*([0-9+-.]*)",$temp,$arr);
$temp = trim($arr[1]);
$temp = str_replace('+','',$temp);
sg('system_temp1',$temp);

$temp=exec("sudo hddtemp /dev/sda1");      
ereg("[^:]*\:[ ]*[^:]*\:[ ]*([0-9+-.]*)",$temp,$arr);
$temp = trim($arr[1]);
$temp = str_replace('+','',$temp);
sg('system_hdd1temp',$temp);
        
$data = shell_exec('uptime');
$uptime = explode(' up ', $data);
$uptime = explode(',', $uptime[1]);
sg('system_uptime',trim($uptime[0]));
        
$bytes = disk_free_space("."); 
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );
$base = 1024;
$class = min((int)log($bytes , $base) , count($si_prefix) - 1);
$temp = round($bytes / pow($base,$class)) . ' ' . $si_prefix[$class];
sg('system_freespace',$temp); 

Re: Majordomo и Linux

Добавлено: Ср дек 02, 2015 5:30 am
savenko_egor
Я тоже делал через "exec". Например температура:

Код: Выделить всё

$temp = exec('sensors | grep Core | awk \'{print $3}\' | cut -c 2-5');
setGlobal('ThisComputer.Temp',$temp); 
Свободная память:

Код: Выделить всё

$mem = exec('free -m | grep Mem: | awk \'{print $4}\'');
setGlobal('ThisComputer.MEM',$mem); 
Загрузка процессора в процентах:

Код: Выделить всё

exec('ps -aux', $processes);
    foreach($processes as $process)
    {
        $cols = split(' ', ereg_replace(' +', ' ', $process));
        if (strpos($cols[2], '.') > -1)
        {
            $cpuUsage += floatval($cols[2]);
        }
    }
setGlobal('ThisComputer.CPU_Load',$cpuUsage); 
Это в сценарии который вызывается curl-ом по cron-у каждую секунду. Костыли вроде, но работают :D

hddtemp по идее должен так работать:

Код: Выделить всё

hddtemp /dev/sda | awk '{print $3}' 
Результат:

Код: Выделить всё

user@supsl3:~$ hddtemp /dev/sda | awk '{print $3}'
32°C
Прошу заметить что у Вас сразу может не заработать. Скорее всего проблема будет в том, что у пользователя от которого выполняется веб-сервер не будет прав. Исправляется добавлением пользователя в необходимую группу.

Re: Majordomo и Linux

Добавлено: Ср дек 02, 2015 12:42 pm
Amarok
Всем - спасибо! В итоге код стал такой у меня:

Код: Выделить всё

//CPU temp
$cpu_temp=exec('cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input') / 1000;
$cpu_temp=round($cpu_temp,1);

//CPU usage
$cpu_usage=exec("top -bn 1 | awk '{print $9}' | tail -n +8 | awk '{s+=$1} END {print s}'");

//System uptime
$sys_uptime=exec('uptime');
$sys_uptime = explode(' up ', $sys_uptime);
$sys_uptime = explode(',', $sys_uptime[1]);
$sys_uptime = trim($sys_uptime[0]);

//Memory usage/total
$mem_total=exec("cat /proc/meminfo | grep MemTotal | awk '{print $2}'");
$mem_usage=$mem_total - exec("cat /proc/meminfo | grep MemFree | awk '{print $2}'");
$sys_memory=$mem_usage . " / " . $mem_total;

//HDD /dev/sda temp
$hdd_temp=exec("hddtemp /dev/sda");
ereg("[^:]*\:[ ]*[^:]*\:[ ]*([0-9+-.]*)",$hdd_temp,$arr);
$hdd_temp = trim($arr[1]);
$hdd_temp = str_replace('+','',$hdd_temp);

//HDD free space
$hdd_freespace=exec("df -h | grep /dev/sda1 | awk '{print $4}'");

if(gg('SysUptime')!=$sys_uptime){sg("SysUptime",$sys_uptime);}
if(gg('SysMemUsed')!=$mem_usage){sg("SysMemUsed",$mem_usage);}
if(gg('SysMemTotal')!=$mem_total){sg("SysMemTotal",$mem_total);}
if(gg('HDDFree')!=$hdd_freespace){sg("HDDFree",$hdd_freespace);}
if(gg('HDDtemp')!=$hdd_temp){sg("HDDtemp",$hdd_temp);}
if(gg('CPUtemp')!=$cpu_temp){sg("CPUtemp",$cpu_temp);}
if(gg('CPUusage')!=$cpu_usage){sg("CPUusage",$cpu_usage);} 

Re: Majordomo и Linux

Добавлено: Вт апр 26, 2016 5:15 pm
Alexiy2
Господа! Доброго времени суток!
Проблема такого рода:
имеется жесткий объемом 3Тб, smartctl в debian показывает правильный его объем, а вот команда df -h говорит, что диск имеет всего 2Тб.
Что это может быть и как с этим бороться? Файловая система на диске ext4

Re: Majordomo и Linux

Добавлено: Вт апр 26, 2016 9:30 pm
coolermister
Это возможно, если диск размечен в стандартный MBR. MBR не поддерживает разделы более 2тб. Вам нужно диск переразметить в GPT, и пересоздать раздел, тогда увидит. Не скажу как сделать это под линуксом, у меня на серверах с линуксом нет таких здоровых дисков) А под виндой - любым софтом для разметки дисков. Paragon Hard Disk Manager к примеру.

Re: Majordomo и Linux

Добавлено: Ср янв 04, 2017 5:31 pm
C_3AXAPOB
Подскажите почему не работает выделенная жирным часть:
$cpu_temp=exec("cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input") / 1000 $cpu_temp=round($cpu_temp,1);

setGlobal('ThisComputer.CpuTemp',$cpu_temp);

Re: Majordomo и Linux

Добавлено: Ср янв 04, 2017 5:47 pm
SolarW
C_3AXAPOB писал(а):Подскажите почему не работает выделенная жирным часть:
Прав на чтение данного файла нет у того пользователя системы от которого стартует exec?

Re: Majordomo и Linux

Добавлено: Ср янв 04, 2017 6:30 pm
C_3AXAPOB
Как поправить?


Отправлено с моего iPhone используя Tapatalk

Re: Majordomo и Linux

Добавлено: Ср янв 04, 2017 11:58 pm
SolarW
C_3AXAPOB писал(а):Как поправить?
Для начала посмотреть наличие файла и что у него с правами:

Код: Выделить всё

ls -l /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input