การเขียนโปรแกรม Python เพื่อตรวจสอบสถานะของเครื่อง Server - mrolarik/simple-iot GitHub Wiki
ตัวอย่างการทำงานของ Linux command และการเขียน Python เพื่อเรียกใช้ Linux command ได้กล่าวไว้ในบทความ ดังต่อไปนี้
- คำสั่ง Linux ที่ใช้แสดงสถานะการทำงานของ Server
- เขียนโปรแกรม Python เพื่อเรียกใช้คำสั่ง Linux Command Line
ในบทความนี้ได้กล่าวถึงการเขียนโปรแกรม Python เพื่อตรวจสอบสถานะของเครื่อง Server โดยมีลำดับขั้นตอน ดังต่อไปนี้
การสร้างฟังก์ชัน (Function)
- ในภาษา Python การสร้างฟังก์ชันสามารถกำหนดโดยใช้ keyword คือ
def
ซึ่งมาจากคำว่าdefinition
การสร้างฟังก์ชันสามารถทำได้ดังนี้
def function_name():
statement1
statement2
จากตัวอย่างข้างต้น ฟังก์ชันที่สร้างขึ้นชื่อ function_name
เป็นฟังก์ชันที่ไม่ต้องการพารามิเตอร์ (Parameter) และไม่มีการคืนค่า (return value) กลับออกจากฟังก์ชัน
- การเรียกใช้ฟังก์ชันสามารถทำได้โดย
function_name()
- หากต้องการสร้างฟังก์ชันที่มีการส่งพารามิเตอร์เข้าไปคำนวณ และมีการคืนค่ากลับออกจากฟังก์ชัน สามารถทำได้โดย
def function_add(para1, para2):
var1 = para1 + para2
return var1
จากตัวอย่าง ทำการสร้างฟังก์ชันชื่อ function_add
โดยฟังก์ชันนี้ได้รับตัวแปร หรือพารามิเตอร์ จำนวน 2 ตัวแปร คือ para1
และ para2
โดยในตัวแปรได้นำค่าทั้ง 2 ไปบวกกัน และเก็บค่าที่ได้ไว้ที่ตัวแปร var1
จากนั้นได้ส่งค่า var1
กลับคืนออกมาจากฟังก์ชัน
- การเรียกใช้ฟังก์ชันสามารถทำได้โดย
add_num = function_add(3,5)
print(add_num)
หรือ
print(function_add(3,5))
ผลลัพธ์ที่ได้คือ
8
ฟังก์ชันเพื่อใช้สำหรับการตรวจสอบสถานะของ Server
ฟังก์ชันที่จะสร้างประกอบด้วย 4 ฟังก์ชันคือ
total_memory
เพื่อใช้แสดงหน่วยความจำทั้งหมดused_memory
เพื่อให้แสดงหน่วยความจำที่ถูกใช้ไปrunning_process
เพื่อแสดงจำนวนโพรเซสที่กำลังทำงานup_time
เพื่อแสดงเวลาทั้งหมดที่เปิดเครื่องเซิร์ฟเวอร์
total_memory
ฟังก์ชัน def total_memory():
total_mem = subprocess.Popen("free -m | grep 'Mem' | awk '{print $2}'", shell=True, stdout=subprocess.PIPE)
total_mem = int(total_mem.stdout.read())/1024
return total_mem
used_memory
ฟังก์ชัน def used_memory():
used_mem = subprocess.Popen("free -m | grep Mem | awk '{print $3}'", shell=True, stdout=subprocess.PIPE)
used_mem = int(used_mem.stdout.read())/1024
return used_mem
running_process
ฟังก์ชัน def running_process():
run_process = subprocess.Popen("ps aux | wc -l", shell=True, stdout=subprocess.PIPE)
run_process = run_process.stdout.read()
return run_process
up_time
ฟังก์ชัน def up_time():
up_t = subprocess.Popen("uptime", shell=True, stdout=subprocess.PIPE)
up_t = up_t.stdout.read()
up_t = map(str.strip, up_t.split(','))
up_t = '-'.join(up_t)
return up_t
ส่วนของโปรแกรมหลัก
เมื่อได้สร้างฟังก์ชันเป็นที่เรียบร้อย จากนั้นจะเขียนโปรแกรมเพื่อให้โปรแกรมสามารถไปเรื่อย ๆ จนกว่าจะสั่งให้หยุดการทำงาน สามารถทำได้โดยใช้ คำสั่ง while
ดังต่อไปนี้
import time
while(True):
print("Total memory: ", total_memory())
print("Used memory: ", used_memory())
print("Running process: ", running_process())
print("Uptime: ", up_time())
time.sleep(3)
ในคำสั่ง while
ได้ตรวจสอบเงื่อนไขคือ True
นั่นแสดงว่า While
จะมีค่าเป็นจริงเสมอ จึงส่งผลให้โปรแกรมวนลูป (Loop) ตลอด และจะหยุดทำงานทุก ๆ 3 วินาที โดยใช้คำสั่ง time.sleep(3)
ตัวอย่างโปรแกรมสมบูรณ์
#------------status_server.py----------------
import subprocess
import time
def total_memory():
total_mem = subprocess.Popen("free -m | grep Mem | awk '{print $2}'", shell=True, stdout=subprocess.PIPE)
total_mem = int(total_mem.stdout.read())/1024
return total_mem
def used_memory():
used_mem = subprocess.Popen("free -m | grep Mem | awk '{print $3}'", shell=True, stdout=subprocess.PIPE)
used_mem = int(used_mem.stdout.read())/1024
return used_mem
def running_process():
run_process = subprocess.Popen("ps aux | wc -l", shell=True, stdout=subprocess.PIPE)
run_process = run_process.stdout.read()
return run_process
def up_time():
up_t = subprocess.Popen("uptime", shell=True, stdout=subprocess.PIPE)
up_t = up_t.stdout.read()
up_t = map(str.strip, up_t.split(','))
up_t = '-'.join(up_t)
return up_t
while(True):
print("Total memory: ", total_memory())
print("Used memory: ", used_memory())
print("Running process: ", running_process())
print("Uptime: ", up_time())
time.sleep(3)
การสั่งให้โปรแกรมทำงานสามารถทำได้โดยเปิด Terminal และพิมพ์คำสั่งดังต่อไปนี้
$ python status_server.py
ผลลัพธ์ที่ได้คือ
('Total memory: ', 15)
('Used memory: ', 3)
('Running process: ', '243\n')
('Uptime: ', '14:20:11 up 3 days-18:06-4 users-load average: 0.34-0.41-0.49')
('Total memory: ', 15)
('Used memory: ', 3)
('Running process: ', '243\n')
('Uptime: ', '14:20:14 up 3 days-18:06-4 users-load average: 0.34-0.41-0.49')
('Total memory: ', 15)
('Used memory: ', 3)
('Running process: ', '243\n')
('Uptime: ', '14:20:17 up 3 days-18:06-4 users-load average: 0.31-0.41-0.49')
('Total memory: ', 15)
('Used memory: ', 3)
('Running process: ', '244\n')
('Uptime: ', '14:20:20 up 3 days-18:06-4 users-load average: 0.31-0.41-0.49')