Bash Scripting สำหรับ DevOps: เขียน Script อัตโนมัติบน VPS

Bash Script คืออะไร

Bash Script คือไฟล์ข้อความที่เก็บชุดคำสั่ง Bash Shell (Bourne Again Shell) เพื่อให้ผู้ใช้สามารถรันคำสั่ง Linux/Unix หลายคำสั่งพร้อมกันได้ โดยไม่ต้องพิมพ์แต่ละคำสั่งเดี่ยวๆ ทำให้สามารถทำงาน Server Administration และ Automation ได้อย่างมีประสิทธิภาพ

เหตุผลที่ต้องใช้ Bash Script

Bash Script มีประโยชน์มากมาย โดยเฉพาะสำหรับงาน DevOps ดังนี้

  • การจัดการตัวแปร (Variables) – สามารถเก็บและใช้ข้อมูลได้อย่างมีประสิทธิภาพ
  • การวนซ้ำ (Loops) – เช่น For Loop, While Loop สำหรับประมวลผลข้อมูลหลายรายการ
  • เงื่อนไข (Conditional Statements) – เช่น If, Else เพื่อตัดสินใจทำงาน
  • ฟังก์ชัน (Functions) – สามารถสร้างโค้ดที่นำกลับมาใช้ได้
  • การจัดการข้อความและตัวเลข (String and Numeric Operations) – ประมวลผลข้อมูล
  • Regular Expressions – ค้นหาและแทนที่ข้อความตามรูปแบบ
  • การจัดการไฟล์ (File Operations) – อ่าน เขียน และจัดการไฟล์
  • การจัดการสิทธิ์การเข้าถึง (Permissions) – ควบคุมการเข้าถึงไฟล์และไดเรกทอรี

1. Script สำหรับ Backup Files

Script นี้ใช้สำหรับสำรองข้อมูลไฟล์อย่างอัตโนมัติ พร้อมการลบไฟล์ backup เก่าเพื่อประหยัดพื้นที่ดิสก์

#!/bin/bash

BACKUP_DIR="/backups"
SOURCE_DIR="/home/user/documents"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup_${DATE}.tar.gz"

if [ ! -d "$BACKUP_DIR" ]; then
    mkdir -p "$BACKUP_DIR"
fi

tar -czf "$BACKUP_FILE" "$SOURCE_DIR"

if [ $? -eq 0 ]; then
    echo "Backup created: $BACKUP_FILE"
    # ลบ backup ที่มีอายุเกิน 30 วัน
    find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +30 -delete
    echo "Old backups removed"
else
    echo "Backup failed"
    exit 1
fi

2. Script สำหรับตรวจสอบพื้นที่ดิสก์

Script นี้ช่วยตรวจสอบการใช้พื้นที่ดิสก์บน VPS และเตือนเมื่อพื้นที่เต็มเกินขีดจำกัด

#!/bin/bash

THRESHOLD=80

df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
    usage=$(echo $output | awk '{ print $1}' | cut -d'%' -f1)
    partition=$(echo $output | awk '{ print $2 }')
    
    if [ $usage -ge $THRESHOLD ]; then
        echo "Warning: Partition $partition is $usage% full"
        # สามารถเพิ่มการส่ง email แจ้งเตือน
        # mail -s "Disk Space Alert" [email protected]
    fi
done

3. Script สำหรับอัพเดตระบบ

Script นี้ใช้เพื่ออัพเดตแพคเกจและระบบปฏิบัติการบนเซิร์ฟเวอร์ Linux โดยอัตโนมัติ

#!/bin/bash

echo "Starting system update..."

# อัพเดตรายการแพคเกจ
apt-get update

# อัพเกรดแพคเกจทั้งหมด
apt-get upgrade -y

# อัพเกรดระบบเมื่อจำเป็น
apt-get dist-upgrade -y

# ลบแพคเกจที่ไม่ใช้
apt-get autoremove -y

# ล้างไฟล์ cache
apt-get clean

echo "System update completed successfully"
echo "Please reboot the server if needed"

4. Script สำหรับโปรแกรมการสำรองข้อมูลอัตโนมัติ (Cron Job)

Script นี้สามารถตั้งเวลาให้ทำงานอัตโนมัติทุกวัน โดยใช้ crontab

#!/bin/bash

# ไฟล์บันทึก
LOG_FILE="/var/log/daily_backup.log"

# ฟังก์ชันสำรองข้อมูล
perform_backup() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting backup..." >> $LOG_FILE
    
    # สำรองข้อมูลเว็บไซต์
    tar -czf /backups/website_$(date +%Y%m%d).tar.gz /var/www/html
    
    # สำรองข้อมูลฐานข้อมูล
    mysqldump -u user -ppassword database > /backups/database_$(date +%Y%m%d).sql
    
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backup completed" >> $LOG_FILE
}

perform_backup

Best Practices สำหรับ Bash Scripting

  • ใส่ Shebang ที่บรรทัดแรก – ใช้ #!/bin/bash เพื่อระบุว่าเป็น Bash Script
  • ตั้งชื่อตัวแปรที่มีความหมาย – ใช้ชื่อที่อธิบายตัวแปร เช่น BACKUP_DIR, SOURCE_FILE
  • เพิ่มความเห็น (Comments) – อธิบายสิ่งที่ Script ทำเพื่อให้ผู้อื่นเข้าใจ
  • ใส่เครื่องหมายคำพูด (Quotes) รอบตัวแปร – ป้องกันปัญหาจากช่องว่างในเส้นทาง
  • ตรวจสอบ Return Code – ตรวจสอบว่าคำสั่งสำเร็จหรือไม่ด้วย $?
  • ใช้ Error Handling – จัดการข้อผิดพลาดด้วยการตรวจสอบและการออกจาก Script
  • ทดสอบ Script ก่อนใช้งาน – รันด้วยอาร์กิวเมนต์ต่างๆ เพื่อตรวจสอบข้อผิดพลาด
  • ใช้ Logging – เก็บบันทึกการทำงานของ Script เพื่อการ Debug และตรวจสอบ
  • ตั้งสิทธิ์ในการปฏิบัติการ (Execute Permission) – ใช้ chmod +x ก่อนรัน Script

วิธีรัน Bash Script

  • รันโดยตรง: ./script.sh (เมื่อ Script มี execute permission)
  • รันด้วย Bash: bash script.sh
  • รันด้วย Source: source script.sh (Script จะรันใน Shell ปัจจุบัน)
  • ตั้งเวลาด้วย Cron: crontab -e เพื่อตั้งเวลารัน Script อัตโนมัติ

Bash Script กับ Cloud VPS

  • การสำรองข้อมูลอัตโนมัติเพื่อป้องกันการสูญเสีย
  • การตรวจสอบสุขภาพของเซิร์ฟเวอร์แบบ Real-time
  • การบริหารจัดการแพคเกจและอัพเดตระบบอัตโนมัติ
  • การปรับความสามารถของระบบได้ตามความต้องการ
  • การลดงานที่ต้องทำด้วยมือและเพิ่มความปลอดภัย

สรุป

Bash Scripting เป็นทักษะสำคัญสำหรับวิศวกร DevOps ที่ต้องการทำให้การทำงานกับเซิร์ฟเวอร์เป็นไปโดยอัตโนมัติและลดข้อผิดพลาด บันทึกบทความนี้และลองสร้าง Script ของตัวเองเพื่อเพิ่มประสิทธิภาพในการจัดการเซิร์ฟเวอร์ VPS ของคุณ