Quản lý hệ thống với Bash: Theo dõi tài nguyên và can thiệp tiến trình trong DevOps
Hướng dẫn sử dụng Bash để giám sát CPU, RAM, disk, quản lý tiến trình và can thiệp hệ thống DevOps với ps, top, kill, systemctl, journalctl, df, free, lsof, ss.
Trong bài viết trước, chúng ta đã tìm hiểu cách tích hợp Bash vào các pipeline CI/CD, từ việc kích hoạt Strict Mode đến bảo vệ secret và chống Command Injection. Bây giờ, chúng ta sẽ quay lại “mặt đất” — nơi Bash phát huy sức mạnh trực tiếp trên server: quản lý hệ thống và giám sát tài nguyên.
Khi vận hành hạ tầng DevOps, bạn không thể lúc nào cũng ngồi trước màn hình quan sát server. Đôi khi một tiến trình ngốn RAM bất thường, một ổ disk đầy ảnh hưởng đến log rotation, hay một dịch vụ quan trọng bị crash giữa đêm. Những lúc như vậy, một script Bash đúng chuẩn có thể phát hiện sự cố trước khi bạn kịp nhận cuộc gọi khẩn cấp, và thậm chí tự động can thiệp để khôi phục dịch vụ.
Bài viết này sẽ hướng dẫn bạn các lệnh cốt lõi để giám sát tài nguyên hệ thống (CPU, RAM, Disk, Network), quản lý tiến trình và dịch vụ, cùng một script thực hành DevOps kết hợp cron để theo dõi server liên tục.
Giám sát tài nguyên hệ thống
CPU và tải hệ thống
Lệnh top là công cụ đầu tiên bạn nghĩ đến khi cần xem CPU đang chạy gì:
1
2
# Chạy top 1 lần rồi thoát (phù hợp cho script)top -bn1 | head -5
Để lấy đúng phần trăm CPU trống, dùng grep và awk:
Lưu ý load average: Nếu load average lớn hơn số CPU cores, hệ thống đang bị quá tải. Ví dụ server 4 cores mà load trung bình là 5.2 nghĩa là có tiến trình đang chờ xử lý.
Kiểm tra swap có đang bị “dùng” không — dấu hiệu cảnh báo khi hệ thống cạn RAM:
1
2
3
4
5
# Kiểm tra swap usageswap_used=$(free | awk '/Swap:/ {print $3}')if[["$swap_used" -gt 0]];thenecho"Cảnh báo: Đang sử dụng ${swap_used}KB swap"fi
Disk và inode
df hiển thị dung lượng ổ cứng:
1
2
# Dung lượng partition theo %df -h --output=target,pcent | tail -n +2
Kiểm tra partition nào vượt ngưỡng 80%:
1
2
3
4
5
6
whileread -r mount usage;dopct=$(echo"$usage"| tr -d '%')if[["$pct" -ge 80]];thenecho"Cảnh báo: $mount đang dùng $usage dung lượng"fidone < <(df -h --output=target,pcent | tail -n +2)
du giúp tìm thư mục chiếm nhiều dung lượng nhất:
1
2
# Top 10 thư mục lớn nhất từ /du -h --max-depth=1 / 2>/dev/null | sort -rh | head -10
Kiểm tra inode — nhiều khi dung lượng trống nhưng inode đã hết:
1
df -i --output=target,ipcent | tail -n +2
Quản lý tiến trình
Liệt kê và tìm tiến trình
ps là lệnh cơ bản nhất để xem tiến trình đang chạy:
1
2
3
4
5
# Liệt kê tất cả tiến trình với CPU và RAMps aux --sort=-%cpu | head -15
# Tìm tiến trình theo tênps aux | grep -E '[n]ginx'| awk '{print $2, $4"%CPU", $11}'
Mẹo: Dùng [n]ginx thay vì nginx để grep không bắt chính dòng lệnh grep itself.
[2026-08-29 10:00:01] [INFO] === System monitoring started ===
[2026-08-29 10:00:01] [INFO] CPU: 23.5% — OK
[2026-08-29 10:00:01] [INFO] RAM: 61.2% — OK
[2026-08-29 10:00:02] [WARN] Disk / usage: 87% (threshold: 80%)
[2026-08-29 10:00:02] [INFO] Cleaned old compressed logs (>30 days)
[2026-08-29 10:00:02] [INFO] Service nginx — running
[2026-08-29 10:00:02] [INFO] Service docker — running
[2026-08-29 10:00:02] [INFO] Service sshd — running
[2026-08-29 10:00:02] [INFO] === System monitoring completed ===
Ghi chú triển khai
Tránh kill tiến trình quan trọng: Không bao giờ kill -9 một tiến trình mà bạn chưa xác định rõ là gì. Luôn đọc kỹ output của ps aux trước khi can thiệp. Trong script ví dụ ở trên, chúng ta chỉ kill tiến trình消耗 CPU cao nhất — nhưng trong production, hãy thêm whitelist để bảo vệ các PID quan trọng (database, application server).
Log rotation: Script tự xoay vòng log khi file vượt 10MB. Trong thực tế, nên kết hợp với logrotate để quản lý log tập trung và giữ lại lịch sử cần thiết.
Ngưỡng tùy chỉnh: Sử dụng biến môi trường (CPU_THRESHOLD, RAM_THRESHOLD, DISK_THRESHOLD) thay vì hardcode để dễ thay đổi theo từng server mà không cần sửa code.
Xem xét替代 giải pháp: Bash phù hợp cho các script giám sát đơn giản. Khi hệ thống lớn hơn (hàng trăm server), hãy kết hợp với Prometheus + Grafana hoặc các công cụ monitoring chuyên dụng, nhưng Bash vẫn là lựa chọn nhanh chóng để tạo script can thiệp khẩn cấp.
Test trước khi deploy: Luôn chạy script trên staging hoặc dùng bash -x để debug trước khi đưa vào cron trên production.
Lời kết
Quản lý hệ thống không đòi hỏi những công cụ phức tạp — nhiều khi chỉ cần ps, top, free, df, systemctl và ss kết hợp trong một script Bash gọn gàng là đủ để giữ server chạy ổn định. Từ việc giám sát CPU/RAM, kiểm tra disk, theo dõi trạng thái dịch vụ đến việc tự động can thiệp khi phát hiện sự cố, Bash vẫn là người bạn đồng hành đáng tin cậy của DevOps Engineer.
Ở bài tiếp theo, chúng ta sẽ khám phá cách tự động hóa SSH với Bash: quản lý đồng thời nhiều server, chạy lệnh từ xa và truyền file an toàn bằng ssh, scp và rsync.