มุมมองที่ทรงพลังของโปรแกรมเชลล์ Unix/Linux เช่น bash คือการสนับสนุนที่มหัศจรรย์สำหรับโครงสร้างการเขียนโปรแกรมทั่วไปที่ช่วยให้คุณตัดสินใจ รันคำสั่งซ้ำๆ สร้างฟังก์ชันใหม่ และอื่นๆ อีกมากมาย คุณสามารถเขียนคำสั่งในไฟล์ที่เรียกว่าสคริปต์เชลล์และรันพวกมันร่วมกัน
สิ่งนี้เสนอวิธีที่น่าเชื่อถือและมีประสิทธิภาพในการบริหารระบบ คุณสามารถเขียนสคริปต์เพื่อทำงานอัตโนมัติ เช่น การสำรองข้อมูลรายวัน อัปเดตระบบ เป็นต้น สร้างคำสั่ง/ยูทิลิตี้/เครื่องมือกำหนดเองใหม่ และอื่นๆ อีกมากมาย คุณสามารถเขียนสคริปต์เพื่อช่วยให้คุณติดตามสิ่งที่กำลังเกิดขึ้นบนเซิร์ฟเวอร์
หนึ่งในองค์ประกอบสำคัญของเซิร์ฟเวอร์คือหน่วยความจำ (RAM) มันส่งผลมากต่อประสิทธิภาพโดยรวมของระบบ
ในบทความนี้ เราจะแชร์สคริปต์เชลล์ขนาดเล็กแต่มีประโยชน์ เพื่อส่งอีเมลเตือนให้ผู้ดูแลระบบคนหนึ่งหรือหลายคน หากหน่วยความจำของเซิร์ฟเวอร์กำลังต่ำ
สคริปต์นี้มีประโยชน์โดยเฉพาะสำหรับการเฝ้าระวัง Linux VPS (Virtual Private Servers) ที่มีหน่วยความจำน้อย ประมาณ 1GB (ประมาณ 990MB)
การตั้งค่าสภาพแวดล้อมทดสอบ
- เซิร์ฟเวอร์ production CentOS/RHEL 7 ที่ติดตั้งยูทิลิตี mailx พร้อม postfix mail server ที่ทำงานได้
นี่คือวิธีการทำงานของสคริปต์ alertmemory.sh: ก่อนอื่นมันตรวจสอบขนาดหน่วยความจำว่าง แล้วตัดสินใจว่าปริมาณหน่วยความจำว่างน้อยกว่าหรือเท่ากับขนาดที่ระบุ (100 MB สำหรับวัตถุประสงค์ของคู่มือนี้) ซึ่งใช้เป็นเกณฑ์มาตรฐานสำหรับขนาดหน่วยความจำว่างขั้นต่ำที่ยอมรับได้
หากเงื่อนไขนี้เป็นจริง มันจะสร้างรายการกระบวนการ 10 อันดับแรกที่ใช้หน่วยความจำ RAM ของเซิร์ฟเวอร์ และส่งอีเมลเตือนไปยังที่อยู่อีเมลที่ระบุ
หมายเหตุ: คุณจะต้องทำการเปลี่ยนแปลงเล็กน้อยในสคริปต์ (โดยเฉพาะยูทิลิตีส่งอีเมล ใช้แฟล็กที่เหมาะสม) เพื่อให้ตรงตามข้อกำหนดของการกระจาย Linux ของคุณ
สคริปต์เชลล์ตรวจสอบหน่วยความจำเซิร์ฟเวอร์
#!/bin/bash
#######################################################################################
#Script Name :alertmemory.sh
#Description :send alert mail when server memory is running low
#Args :
#Author :Aaron Kili Kisinga
#Email :admin@wsxdn.com
#License : GNU GPL-3
#######################################################################################
## declare mail variables ##
email subject
subject="Server Memory Status Alert"
## sending mail as
from="admin@wsxdn.com"
## sending mail to
to="admin@wsxdn.com"
## send carbon copy to
also_to="admin@wsxdn.com"
## get total free memory size in megabytes(MB)
free=$(free -mt | grep Total | awk '{print $4}')
## check if free memory is less or equals to 100MB
if [[ "$free" -le 100 ]]; then
## get top processes consuming system memory and save to temporary file
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head >/tmp/top_proccesses_consuming_memory.txt
file=/tmp/top_proccesses_consuming_memory.txt
## send email if system memory is running low
echo -e "Warning, server memory is running low!\n\nFree memory: $free MB" | mailx -a "$file" -s "$subject" -r "$from" -c "$to" "$also_to"
fi
exit 0
หลังจากสร้างสคริปต์ /etc/scripts/alertmemory.sh ให้ทำให้มันรันได้และสร้าง symlink ไปที่ cron.hourly
# chmod +x /etc/scripts/alertmemory.sh # ln -s -t /etc/cron.hourly/alertmemory.sh /etc/scripts/alertmemory.sh
นี่หมายความว่าสคริปต์ข้างต้นจะรันทุก 1 ชั่วโมงตราบใดที่เซิร์ฟเวอร์ยังทำงานอยู่
เคล็ดลับ: คุณสามารถทดสอบได้ว่าทำงานตามที่ตั้งใจหรือไม่ โดยตั้งค่าเกณฑ์มาตรฐานสูงขึ้นเล็กน้อยเพื่อให้ส่งอีเมลได้ง่าย และระบุช่วงเวลาประมาณ 5 นาที
จากนั้นตรวจสอบจากบรรทัดคำสั่งโดยใช้คำสั่ง free ที่ให้ในสคริปต์ เมื่อยืนยันว่าทำงานได้แล้ว ให้กำหนดค่าจริงที่คุณต้องการใช้
ด้านล่างคือภาพหน้าจอแสดงอีเมลเตือนตัวอย่าง
ขอจบเพียงเท่านี้! ในบทความนี้ เราอธิบายวิธีใช้สคริปต์เชลล์ส่งอีเมลเตือนให้ผู้ดูแลระบบ หากหน่วยความจำเซิร์ฟเวอร์ (RAM) กำลังต่ำ คุณสามารถแบ่งปันความคิดเห็นที่เกี่ยวข้องกับหัวข้อนี้กับเราผ่านแบบฟอร์มความคิดเห็นด้านล่างครับ