Bash: script kiểm tra server có exit code
Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.
Bash: script kiểm tra server có exit code
Mục tiêu
Viết script nhận URL, báo trạng thái HTTP và trả exit code dùng được trong CI.
Hiểu trước khi làm
Exit 0 là thành công, khác 0 là lỗi. Biến chứa khoảng trắng phải quote. Pipe mặc định trả exit code lệnh cuối; pipefail giữ lỗi trong pipeline. set -e có ngoại lệ trong condition/compound command, nên xử lý lỗi bằng if thay vì chỉ dựa vào nó. Script chỉ quan sát, không tự restart dịch vụ khi health check thất bại.
Chuẩn bị
Hoàn thành các bài cốt lõi trước đó trong module; dùng workspace ~/kdc-labs và ứng dụng mẫu ở project. Chạy agent trên chính máy làm bài, với lab root ~/kdc-labs.
Tải ứng dụng mẫu KDC Notes · Cách tải và chuẩn bị workspace. Không cần mã nguồn nền tảng khóa học.
cd ~/kdc-labs/project
mkdir -p ../evidence
Giải thích lệnh và tham số
cd chuyển vào repo ứng dụng của bạn; .. là thư mục cha ~/kdc-labs. mkdir -p tạo thư mục bằng chứng nếu chưa có, không báo lỗi khi đã tồn tại. Mọi đường dẫn tương đối ở dưới tính từ đây, trừ khi bước ghi rõ máy/thư mục khác.
Thực hành
Tạo file server-health.sh:
#!/usr/bin/env bash
set -euo pipefail
url="${1:-http://127.0.0.1:8081/healthz}"
report="${2:-health-report.txt}"
check_http() {
if curl -fsS --connect-timeout 2 --max-time 5 "$url" > "$report"; then
printf 'HTTP_OK\n'
else
printf 'HTTP_FAILED\n' >&2
return 1
fi
}
printf 'time=%s\n' "$(date -u)"
df -h .
check_http
Giải thích lệnh và tham số
set -e dừng với một số lỗi không được xử lý; -u báo biến chưa đặt và -o pipefail giữ lỗi pipeline. curl -f báo HTTP lỗi, -s tắt progress, -S giữ lỗi; --connect-timeout 2 giới hạn kết nối và --max-time 5 giới hạn cả request. df -h in dung lượng theo đơn vị dễ đọc. Hàm dùng if và return 1 để truyền lỗi rõ ràng. >&2 gửi thông báo ra stderr.
$1/$2 là tham số vị trí; ${1:-...} dùng mặc định khi không truyền. Hàm gom kiểm tra có thể gọi lại. Thêm phần Linux free -m, uptime, ip -brief address và systemctl is-active kdc-notes.service sau khi đã làm Module 04. Với macOS dùng vm_stat và bỏ systemd, ghi rõ khác biệt.
chmod 700 server-health.sh
./server-health.sh http://127.0.0.1:8081/healthz "../evidence/health report.txt"
if ./server-health.sh http://127.0.0.1:18081/healthz ../evidence/failed.txt; then
printf "Sai: endpoint hỏng lại được báo thành công\n"
else
printf "Đúng: lỗi HTTP được truyền ra exit code\n"
fi
Giải thích lệnh và tham số
chmod 700 chỉ owner đọc/ghi/chạy script. Cặp quote giữ tên file chứa khoảng trắng thành một đối số. if kiểm tra exit code; lỗi dự kiến không kết thúc phiên terminal. -u báo biến chưa đặt, -o pipefail giữ lỗi pipeline, curl --max-time giới hạn toàn request.
Tiêu chí tệp nộp bài
Các đường dẫn dưới đây tính từ lab root ~/kdc-labs, không từ thư mục project. Không viết sẵn kết quả giả để qua kiểm tra. Tệp có đúng tiêu đề chưa chứng minh đã thực hiện bài; giữ đầu ra thật và tự đối chiếu các phép thử.
project/server-health.sh— có nội dungpipefail.project/server-health.sh— có nội dung"$url".evidence/bash-health-script.md— có nội dung## Kết quả.
Tự kiểm tra
URL tốt exit 0; URL không listen exit khác 0. File có khoảng trắng được tạo thành một file. Giải thích command substitution, redirect stdout/stderr và vì sao chỉ thấy HTTP_OK chưa đủ để biết script đúng.
Kiểm tra trên web xác nhận tệp cấu hình hoặc hồ sơ bài làm dưới lab root; không xác nhận dịch vụ cloud, kết quả CI hay nội dung lập luận. Bạn phải thực hiện các phép thử bên trên và lưu đầu ra thật để tự đối chiếu.
Lưu bằng chứng
Tạo evidence/bash-health-script.md bằng trình soạn thảo, gồm các mục dưới đây. Điền số liệu và lệnh đã chạy, thời điểm, đầu ra trước/sau, cùng kết luận của bạn; không chỉ sao chép tiêu đề. Không lưu token, mật khẩu, kubeconfig hoặc dump dữ liệu vào báo cáo.
## Môi trường
Hệ điều hành, phiên bản công cụ, cluster/VM và thời điểm.
## Kết quả
Lệnh kiểm tra, đầu ra đã che thông tin nhạy cảm, kết quả mong đợi/thực tế.
## Giải thích
Vì sao cách làm đạt mục tiêu; giới hạn của phép kiểm tra.
## Khôi phục
Cách rollback/cleanup riêng các tài nguyên lab và cách xác nhận lại.