我已經安裝了lm-sensors,我想知道是否有某種綁定從PHP內部訪問這些驅動程序?我想要訪問各種服務器上的溫度讀數,並使用pushover來通知我的iPhone,如果事情在多個遠程服務器機房中過熱。我還有一些web enabled power switches,我的服務器可以在緊急情況下自動關閉設備。我有其他幾個監控系統用批處理PHP編寫,所以我寧願用PHP編寫,所以我可以重用現有的代碼。另外,這是我最熟悉的語言。我想我可以使用exec來運行傳感器並解析輸出,但如果其他人已經編寫了一個用於訪問主板溫度讀數的PHP類,我想盡可能使用它。如何在Debian上使用PHP讀取主板溫度讀數?
回答
的解決方案,我結束了同正想使用PHP通過/ sys/class/thermal/thermal_zone2/temp讀取/ sys/class/thermal/thermal_zone0/temp的內容。每個文件都包含一個數字,即千分之一度的溫度。這是Linux內核的標準部分,並且這似乎是一個標準的內核函數,所以它應該在大多數較新的Linux系統中保持可用。它在我測試過的6號機上可用。
不經得起考驗的,但你可以安裝一個軟件包像lm-sensors
,然後就通過高管或類似的東西運行命令sensors
和打印輸出
但肯定有這樣做的更好的方法。
編輯
我想你可以登錄一般的CPU或任何的溫度和剛讀在PHP該日誌文件和打印輸出
是的,我可以使用exec,就像我在我的問題中所說的那樣。但是這意味着編寫代碼來解析傳感器輸出,並希望它永遠不會改變。而且,我的各種不同的機器具有不同數量的傳感器,具有不同的傳感器名稱,使事情稍微複雜一些。這就是爲什麼我希望有人編寫了php綁定到lm-sensors庫,或者是一個php類來解析這個輸出,我不需要維護自己。 – fastfinge
我寫傳感器的輸出解析器,
function read_sensors(): array {
if (0) {
// for debugging/testing
$stdout = getStdOut();
} else {
exec ("sensors -u", $stdout, $ret);
if ($ret !== 0) {
throw new \RuntimeException ('sensors failed! returned ' . var_export ($ret, true));
}
$stdout = implode ("\n", $stdout);
}
unset ($ret);
$ret = [ ];
foreach (array_filter (array_map ('trim', explode ("\n\n", trim ($stdout))), 'strlen') as $sensor) {
// var_dump($sensor) & die();
$infRaw = array_filter (array_map ('trim', explode ("\n", trim ($sensor))), 'strlen');
if (count ($infRaw) < 2) {
throw new \LogicException ('unknown format from sensors, could not understand: ' . $sensor);
}
$name = $infRaw [0];
unset ($infRaw [0]);
$ret [$name] = [ ];
if (0 !== strlen (trim (explode (":", $infRaw [1], 2) [1]))) {
// some devices doesn't have a type. seen in 1/5 intel systems tested, and only on 1 device (named `Adapter: Virtual device`, not sure what it was)
$ret [$name] ['type'] = $infRaw [1];
unset ($infRaw [1]);
}
$currentKey = NULL;
foreach ($infRaw as $line) {
$debugRawLine = $line;
if (false !== ($pos = strpos ($line, '_'))) {
$line = array_filter (array_map ('trim', explode (":", trim (substr ($line, $pos + 1)))), 'strlen');
if (count ($line) !== 2) {
throw new \RuntimeException ('unknown format from sensors, could not understand: ' . $debugRawLine);
}
$ret [$name] [$currentKey] [$line [0]] = $line [1];
} elseif (substr ($line, - 1) === ':') {
$line = substr ($line, 0, - 1);
$currentKey = $line;
} else {
throw new \LogicException ('unknown format from sensors, could not understand: ' . $debugRawLine);
}
}
}
return $ret;
}
並且已經在5個不同的系統測試成功,包括的Debian 9的ubuntu 16.04,和拱(完全更新2018年1月9日),和它在一個非常老的amd系統(其中sensur輸出格式完全不同)上失敗
- 1. 如何讀取HardDisk溫度?
- 2. 溫度讀數
- 3. 如何使用contiki-OS讀取溫度,溼度和光照度?
- 4. 如何從ti讀取溫度SensorTag Android
- 5. 從BMP085讀取I2C溫度讀回0xffff
- 6. 如何提高arduino TMP36溫度讀數?
- 7. ADT7420溫度讀數-Verilog
- 8. 如何使用owfs讀取iButton溫度記錄器?
- 9. 如何使用OpenCV讀取傳統溫度計
- 10. 在C#中讀取GPU溫度
- 11. 我可以在mega2560上使用multiplet DHT22讀取單獨的溫度/溼度嗎?
- 12. 讀取溫度圖iBeacon顯示
- 13. sudo /script.py - 在.php中讀出溫度和溼度
- 14. PHP從本地Web服務器讀取溫度值
- 15. 通過iPhone應用程序從設備讀取溫度數據
- 16. 使用Android Things通過DHT11讀取溫度
- 17. Mysql Php溫度平均讀數除以小時數
- 18. 如何在C#中獲取主板傳感器讀數#
- 19. 如何在Debian系統上安裝Debian軟件包時讀取輸入信息
- 20. 如何讀取GPU(圖形卡)的溫度?
- 21. 讀取RPi的GPIO上的溫度傳感器值。步驟
- 22. 如何用php讀取webform
- 23. 如何讀取在PHP
- 24. 我如何讀取在PHP
- 25. PHP和Windows WMI,CPU溫度和錯誤讀數?
- 26. 如何在PHP讀取JSON數據笨
- 27. 如何在PHP中讀取數組?
- 28. 從樹莓派每10分鐘取溫度讀數
- 29. 如何使用PHP讀取PDF書籤?
- 30. 如何使用PHP讀取PDF文件?
也許通過stdin:// –
如果您運行的是SNMP,PHP有一個[實現它](http://www.php .net/manual/en/book.snmp.php),這將解決您對改變輸出格式和多個傳感器的顧慮。你也可以使用像cacti或zabbix這樣的完整軟件包,定義你的閾值,並在腳本觸發時運行腳本。 – Wrikken
不幸的是,我對SNMP一無所知,儘管我可能應該這樣做。我還發現,在所有有問題的機器上都存在像/ sys/class/thermal/thermal_zone0這樣的目錄,所以也許我可以通過我的PHP腳本來讀取它們。我能否依賴這些價值的正確性? – fastfinge