رفتن به محتوا
بازگشت به وبلاگ
لینوکس

اسکریپت‌نویسی Bash برای SysAdmin: خودکارسازی و پایش

نوشتن اسکریپت‌های Bash آماده تولید برای Rotation لاگ، بررسی سلامت سیستم، هشدار خودکار و وظایف نگهداری زیرساخت.

شهریور ۱۴۰۴
۱۶ دقیقه مطالعه

مقدمه

اسکریپت‌نویسی Bash کارهای تکراری مدیریت سیستم را خودکار می‌کند. این راهنما الگوهای عملی Bash مورد استفاده در محیط‌های تولیدی را پوشش می‌دهد.

ساختار بهینه اسکریپت

BASH
#!/bin/bash
set -euo pipefail

readonly LOG_FILE="/var/log/myscript.log"

cleanup() {
    rm -f /tmp/myscript_$$.*
}
trap cleanup EXIT

log() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}

توابع و مدیریت خطا

BASH
check_disk_usage() {
    local mount_point="$1"
    local threshold="${2:-85}"
    local usage=$(df "$mount_point" | awk 'NR==2 {print $5}' | tr -d '%')
    
    if [[ "$usage" -gt "$threshold" ]]; then
        log "WARNING: $mount_point is ${usage}% full"
        return 1
    fi
    return 0
}

if ! check_disk_usage /var 90; then
    echo "Disk alert" | mail -s "Disk Alert" admin@company.com
fi

اسکریپت بررسی سلامت سیستم

BASH
#!/bin/bash
# بررسی بار CPU
cpu_load=$(uptime | awk -F'load average:' '{print $2}' | awk -F',' '{print $1}' | tr -d ' ')
if (( $(echo "$cpu_load > 4.0" | bc -l) )); then
    echo "High CPU: $cpu_load" | mail -s "CPU Alert" admin@company.com
fi

# بررسی دیسک
df -h | awk 'NR>1 {gsub(/%/,"",$5); if($5>85) print "ALERT: "$6" is "$5"% full"}'

# بررسی سرویس‌ها
for service in nginx mysql sshd; do
    systemctl is-active --quiet "$service" || echo "Service $service is DOWN!"
done

پردازش فایل

BASH
while IFS=',' read -r hostname ip role; do
    ping -c 1 -W 1 "$ip" > /dev/null 2>&1 && echo "$hostname: UP" || echo "$hostname: DOWN"
done < hosts.csv