Majordomo и Linux

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
Amarok
Сообщения: 1434
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Контактная информация:

Majordomo и Linux

Сообщение Amarok »

Переезжаю (медленно, но верно) на linux. Вопрос: в этом руководстве есть такие строки

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

sudo apt-get install lm-sensors (пакет для мониторинга температуры системы, частоты вращения кулеров ...)
sudo apt-get install hddtemp (пакет для мониторинга температуры жесткого диска)
 
А как значения сенсоров из hddtemp и lm-sensors передать в Алису?
Моя Алиска живёт на Proxmox в Debian 12
Anton_kulibin
Сообщения: 354
Зарегистрирован: Вт окт 09, 2012 8:05 am
Откуда: Луза Кировская обл. Россия

Re: Majordomo и Linux

Сообщение 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); 
Linux версия. Ubuntu Server 16.04+2xArduinoMega+Eth_GW_Mysensors_10node+WeatherStation+Xiaomi
CONNECT
Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Контактная информация:

Re: Majordomo и Linux

Сообщение 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
Прошу заметить что у Вас сразу может не заработать. Скорее всего проблема будет в том, что у пользователя от которого выполняется веб-сервер не будет прав. Исправляется добавлением пользователя в необходимую группу.
Аватара пользователя
Amarok
Сообщения: 1434
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Контактная информация:

Re: Majordomo и Linux

Сообщение 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);} 
Моя Алиска живёт на Proxmox в Debian 12
Alexiy2
Сообщения: 104
Зарегистрирован: Вт май 12, 2015 9:59 pm

Re: Majordomo и Linux

Сообщение Alexiy2 »

Господа! Доброго времени суток!
Проблема такого рода:
имеется жесткий объемом 3Тб, smartctl в debian показывает правильный его объем, а вот команда df -h говорит, что диск имеет всего 2Тб.
Что это может быть и как с этим бороться? Файловая система на диске ext4
coolermister
Сообщения: 49
Зарегистрирован: Пт июл 31, 2015 9:23 am

Re: Majordomo и Linux

Сообщение coolermister »

Это возможно, если диск размечен в стандартный MBR. MBR не поддерживает разделы более 2тб. Вам нужно диск переразметить в GPT, и пересоздать раздел, тогда увидит. Не скажу как сделать это под линуксом, у меня на серверах с линуксом нет таких здоровых дисков) А под виндой - любым софтом для разметки дисков. Paragon Hard Disk Manager к примеру.
C_3AXAPOB
Сообщения: 510
Зарегистрирован: Ср июн 08, 2016 4:17 pm

Re: Majordomo и Linux

Сообщение 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);
Orange pi pc plus, megaD-2561, Xiaomi
--------------------------------------------------
http://connect.smartliving.ru/profile/908
SolarW
Сообщения: 179
Зарегистрирован: Вс июл 31, 2016 11:24 pm

Re: Majordomo и Linux

Сообщение SolarW »

C_3AXAPOB писал(а):Подскажите почему не работает выделенная жирным часть:
Прав на чтение данного файла нет у того пользователя системы от которого стартует exec?
C_3AXAPOB
Сообщения: 510
Зарегистрирован: Ср июн 08, 2016 4:17 pm

Re: Majordomo и Linux

Сообщение C_3AXAPOB »

Как поправить?


Отправлено с моего iPhone используя Tapatalk
Orange pi pc plus, megaD-2561, Xiaomi
--------------------------------------------------
http://connect.smartliving.ru/profile/908
SolarW
Сообщения: 179
Зарегистрирован: Вс июл 31, 2016 11:24 pm

Re: Majordomo и Linux

Сообщение SolarW »

C_3AXAPOB писал(а):Как поправить?
Для начала посмотреть наличие файла и что у него с правами:

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

ls -l /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input
Ответить