Возможно, вы захотите попробовать сисмон. Хотя он и не такой причудливый, как Glances, он очень прост и прост в использовании.
Если вы хотите испачкаться и немного поработать над сценариями на python, вот некоторые основы системного мониторинга с помощью Python, которые помогут вам начать.
Вам понадобится внешний модуль под названием psutil
чтобы следить за большинством вещей. Проще всего использовать установщик внешнего модуля вместо сборки из исходного кода.
Примечание: Эти примеры написаны на Python 2.7
sudo apt-get install pipsudo pip install psutil
Теперь, когда у нас установлены модули, мы можем приступить к кодированию.
Сначала создайте файл с именем usage.py
.
gedit ~/usage.py
Начните с импорта psutil
import psutil
Затем создайте функцию для отслеживания процента работы ядер вашего процессора.
def cpu_perc(): cpu_perc = psutil.cpu_percent(interval=1, percpu=True) for i in range(len(cpu_perc)): print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"
Давайте немного разберем это, хорошо?
Первая строка, cpu_num = psutil.cpu_percent(interval=1, percpu=True)
, находит процент , на котором работают ядра вашего процессора , и присваивает его списку с именем cpu_perc
.
Этот цикл прямо здесь
for i in range(len(cpu_num)): print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%"
это цикл for, который выводит текущий процент каждого из ядер вашего процессора.
Давайте добавим использование оперативной памяти.
Создайте функцию, вызываемую ram_perc
.
def ram_perc(): mem = psutil.virtual_memory() mem_perc = mem.percent print "RAM: ", mem_perc, "%"
psutil.virtual_memory
предоставляет набор данных, содержащий различные сведения о оперативной памяти вашего компьютера.
Далее вы можете добавить некоторые факты о вашей сети.
def net(): net = psutil.net_io_counters() mbytes_sent = float(net.bytes_sent) / 1048576 mbytes_recv = float(net.bytes_recv) / 1048576 print "MB sent: ", mbytes_sent print "MB received: ", mbytes_recv
С psutil.net_io_counters()
только дает нам информацию об отправленных и полученных пакетах в байтах, потребовалось некоторое преобразование.
Чтобы получить некоторую информацию о пространстве подкачки, добавьте эту функцию.
def swap_perc(): swap = psutil.swap_memory() swap_perc = swap.percent
Этот вопрос довольно прост.
Температуру довольно сложно определить, поэтому вам, возможно, придется провести собственное исследование, чтобы выяснить, что будет работать с вашим оборудованием.Вам нужно будет отобразить содержимое определенного файла.
Использование диска намного проще, чем температура. Все, что вам нужно сделать, это передать диск, который вы хотите отслеживать (т.е.: /
) через определенную функцию.
def disks(): if len(sys.argv) > 1: for disk in range(1, len(sys.argv)): tmp = psutil.disk_usage(sys.argv[disk]) print sys.argv[disk], "\n" print "Megabytes total: ", print str(float(tmp.total) / 1048576) print "Megabytes used: ", print str(float(tmp.used) / 1048576) print "Megabytes free: ", print str(float(tmp.free) / 1048576) print "Percentage used: ", print tmp.percent, "\n"
Исходный результат psutil.disk_usage
это,
>>>psutil.disk_usage('/')sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
но вы также можете просто получить total
, used
, free
, или percent
.
Завершенная программа: (вышеупомянутые функции были объединены)
import psutil, os, sysmem_perc = 0 #init varswap_perc = 0 #init varmbytes_sent = 0 #init varmbytes_recv = 0 #init varcpu_perc = 0 #init varswap = 0 #init varmem = 0 #init varnet = 0 #init vardef disp(degree): global cpu_perc global swap global swap_perc global mem global mem_perc global net global mbytes_sent global mbytes_recv cpu_perc = psutil.cpu_percent(interval=1, percpu=True) swap = psutil.swap_memory() swap_perc = swap.percent mem = psutil.virtual_memory() mem_perc = mem.percent net = psutil.net_io_counters() mbytes_sent = float(net.bytes_sent) / 1048576 mbytes_recv = float(net.bytes_recv) / 1048576 os.system('clear') #clear the screen print "-"*30 print "CPU" print "-"*30 print "CPU Temperature: " , degree, "'C" for i in range(len(cpu_perc)): print "CPU Core", str(i+1),":", str(cpu_perc[i]), "%" print "-"*30 print "MEMORY" print "-"*30 print "RAM: ", mem_perc, "%" print "Swap: ", swap_perc, "%" print "-"*30 print "NETWORK" print "-"*30 print "MB sent: ", mbytes_sent print "MB received: ", mbytes_recv print "-"*30 print "DISKS" print "-"*30 if len(sys.argv) > 1: for disk in range(1, len(sys.argv)): tmp = psutil.disk_usage(sys.argv[disk]) print sys.argv[disk], "\n" print "Megabytes total: ", print str(float(tmp.total) / 1048576) print "Megabytes used: ", print str(float(tmp.used) / 1048576) print "Megabytes free: ", print str(float(tmp.free) / 1048576) print "Percentage used: ", print tmp.percent, "\n"def main(): print("Press Ctrl+C to exit") while True: temp = open("/sys/class/thermal/thermal_zone0/temp").read().strip().lstrip('temperature :').rstrip(' C') temp = float(temp) / 1000 disp(temp)main()
Линия temp = open("/sys/class/thermal/thermal_zone0/temp").read().strip().lstrip('temperature :').rstrip(' C')
может не работать с вашей конфигурацией оборудования.
Запустите эту программу из командной строки. Передайте диски, которые вы хотите отслеживать, в качестве аргументов из командной строки.
$ python usage.py /Press Ctrl+C to exit------------------------------CPU------------------------------CPU Temperature: 39.0 'CCPU Core 1 : 4.8 %CPU Core 2 : 1.0 %CPU Core 3 : 0.0 %CPU Core 4 : 4.9 %------------------------------MEMORY------------------------------RAM: 33.6 %Swap: 6.4 %------------------------------NETWORK------------------------------MB sent: 2.93382358551MB received: 17.2131490707------------------------------DISKS------------------------------/ Megabytes total: 13952.484375Megabytes used: 8542.6640625Megabytes free: 4678.5703125Percentage used: 61.2 /media/calvin/Data Megabytes total: 326810.996094Megabytes used: 57536.953125Megabytes free: 269274.042969Percentage used: 17.6
Надеюсь, это поможет! Прокомментируйте, если у вас есть какие-либо вопросы.
https://github.com/calthecoder/sysmon-1.0.1