在Linux下有個叫lm_sensors的軟件可以幫助我們來監控主板,CPU的工作電壓,風扇轉速、溫度等數據。這些數據我們通常在主板的 BIOS也可以看到。當我們可以在機器運行的時候通過lm_sensors隨時來監測著CPU的溫度變化,可以預防呵保護因為CPU過熱而會燒掉。
1. 安裝lm_sensors
現在基本上每個Linux都已經有lm_sensors包了,我們主要安裝了就可以了。或者我們也可以通過源文件來自己編譯。
1)在FC,RH, CENTOS下,用rpm:
[root@securitycn ~]# rpm -ivh lm_sensors-2.10.0-3.1.i386.rpm
3)編譯源文件安裝
我們可以通過:這裡下載源文件
這裡我們要注意的問題是要先安裝libsysfs庫,是Sysfsutils,Sysfsutils-devel軟件
tar xzvf lm-sensors-xxx.tar.gz
make user
make user_install testing
下面我們就用一些簡單的命令來利用lm_sensors來得到CPU的數據。我們要用root的身份來:
sensors-detect,然後它會自動搜索主板上的chipset和相應的driver,我們全部答YES就可以了
[root@securitycn ~]# sensors-detect
# sensors-detect revision 1.413 (2006/01/19 20:28:00)
This program will help you determine which I2C/SMBus modules you need to
load to use lm_sensors most effectively. You need to have i2c and
lm_sensors installed before running this program.
Also, you need to be `root', or at least have access to the /dev/i2c-*
files, for most things.
If you have patched your kernel and have some drivers built in, you can
safely answer NO if asked to load some modules. In this case, things may
seem a bit confusing, but they will still work.
It is generally safe and recommended to accept the default answers to all
questions, unless you know what you're doing.
We can start with probing for (PCI) I2C or SMBus adapters.
You do not need any special privileges for this.
Do you want to probe now? (YES/no):
全部默認YES即可。
然後我們啟動lm_sensors :
/etc/init.d/lm_sensors start
Starting lm_sensors: [ OK ]
我們可以通過lsmod來確定我們需要的driver已經加載了沒有
lsmod | grep i2c
i2c_isa 9153 2 w83627hf,w83781d
i2c_i801 11341 0
i2c_dev 12613 0
i2c_ec 9025 1 sbs
i2c_core 23745 6 w83627hf,w83781d,i2c_isa,i2c_i801,i2c_dev,i2c_ec
然後我們用sensors的命令就可以了:
[root@securitycn ~]# sensors
w83627hf-isa-0290
Adapter: ISA adapter
VCore 1: +3.33 V (min = +0.00 V, max = +0.00 V) ALARM
VCore 2: +3.36 V (min = +0.00 V, max = +0.00 V) ALARM
+3.3V: +0.93 V (min = +3.14 V, max = +3.46 V) ALARM
+5V: +5.11 V (min = +4.73 V, max = +5.24 V)
+12V: +4.56 V (min = +10.82 V, max = +13.19 V) ALARM
-12V: -7.10 V (min = -13.18 V, max = -10.88 V) ALARM
-5V: -1.93 V (min = -5.25 V, max = -4.75 V) ALARM
V5SB: +5.51 V (min = +4.73 V, max = +5.24 V) ALARM
VBat: +0.02 V (min = +2.40 V, max = +3.60 V) ALARM
fan1: 0 RPM (min = 2732 RPM, div = 2) ALARM
fan2: 0 RPM (min = 0 RPM, div = 2)
fan3: 0 RPM (min = 0 RPM, div = 2)
temp1: +38癈 (high = +50癈, hyst = +45癈) sensor = thermistor
temp2: +33.5癈 (high = +80癈, hyst = +75癈) sensor = thermistor
temp3: +33.5癈 (high = +80癈, hyst = +75癈) sensor = thermistor
vid: +0.000 V (VRM Version 10.0)
alarms:
beep_enable:
Sound alarm enabled
這裡我們可以看到溫度還沒有相對應CPU,我們主要稍微修改一下/etc/sensors.conf就可以了,不過其實都不用我們自己去動手,一般我們都可以從主板生產商那裡下載到配置文件。通過lmsensors我們就可以得到主板溫度,CPU電壓,風扇轉速這些信息。我們可以根據這些數據來監察系統的運行情況來預防系統的問題。
接下來讓它和MRTG整合在一起吧
[root@securitycn ~]# cd /usr/local/mrtg/bin
[root@securitycn ~]# vi temp.sh
#內容如下
#!/bin/bash
cputemp=`/usr/bin/sensors | grep temp1 |awk '{print $2}'|cut -c 2-4` #這句是說找出有temp1那一行,印出第二個列的2-4個字
systemp =`/usr/bin/sensors | grep temp2 |awk '{print $2}'|cut -c 2-5` 不用解釋了吧
echo $cputemp
echo $systemp
# the uptime
uptime | sed 's:^.* up \(。*\), [0-9][0-9]* users.*$:\1:'
# my name
uname -n
[root@securitycn ~]# chmod +x temp.sh 改成可執行
[root@securitycn ~]# ./temp.sh 試試看有沒有問題
39
33.5
15:36:19 up 22:28, 1 user, load average: 0.04, 0.09, 0.04
securitycn
再來寫下面的文件
[root@securitycn ~]# cd ……/etc/
[root@securitycn ~]# vi temp.cfg
WorkDir: /data1/usr/apache/htdocs/mrtg/temp/
Target[index]: `/usr/local/mrtg/bin/temp.sh`
MaxBytes[index]:80
Options[index]: gauge, nopercent, growright
YLegend[index]: Temp (度)
ShortLegend[index]: 度
LegendO[index]: 系統溫度;
LegendI[index]: CPU溫度;
Title[index]: 系統溫度表
PageTop[index]:主機溫度表
[root@securitycn ~]# /usr/local/mrtg/bin/mrtg /usr/local/mrtg/etc/temp.cfg
執行3次就不報錯了
然後加入到crontab裡面
*/5 * * * * /usr/local/mrtg/bin/mrtg /usr/local/mrtg/etc/temp.cfg