You are a helpful assistant.
system
Viết một tập lệnh bash để kiểm tra xem một trang web nhất định đang hoạt động hay không. Kịch bản nên:
   - Chấp nhận một URL làm đối số dòng lệnh, cùng với tham số thời gian chờ và chuỗi user-agent, ghi kết quả vào tệp với dấu thời gian, xử lý lỗi và triển khai cơ chế thử lại cho các yêu cầu thất bại.
user
Dưới đây là một tập lệnh bash để kiểm tra xem một trang web có đang hoạt động hay không. Tập lệnh này chấp nhận URL, thời gian chờ, và chuỗi user-agent làm đối số dòng lệnh, ghi kết quả vào tệp với dấu thời gian, xử lý lỗi và triển khai cơ chế thử lại cho các yêu cầu thất bại.

```bash
#!/bin/bash

# Kiểm tra xem có đủ số lượng đối số không
if [ "$#" -ne 3 ]; then
    echo "Sử dụng: $0 <URL> <timeout> <user-agent>"
    exit 1
fi

URL=$1
TIMEOUT=$2
USER_AGENT=$3
LOG_FILE="website_status.log"
RETRY_COUNT=3

# Hàm để kiểm tra trạng thái trang web
check_website() {
    local attempt=1
    while [ $attempt -le $RETRY_COUNT ]; do
        # Sử dụng curl để kiểm tra trạng thái trang web
        HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" --max-time $TIMEOUT -A "$USER_AGENT" "$URL")
        
        # Kiểm tra mã trạng thái HTTP
        if [ "$HTTP_STATUS" -eq 200 ]; then
            echo "$(date '+%Y-%m-%d %H:%M:%S') - $URL is up (HTTP $HTTP_STATUS)" >> $LOG_FILE
            return 0
        else
            echo "$(date '+%Y-%m-%d %H:%M:%S') - $URL is down (HTTP $HTTP_STATUS), attempt $attempt" >> $LOG_FILE
        fi
        
        # Tăng số lần thử
        attempt=$((attempt + 1))
        
        # Chờ trước khi thử lại
        sleep 1
    done
    
    # Nếu tất cả các lần thử đều thất bại
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $URL is down after $RETRY_COUNT attempts" >> $LOG_FILE
    return 1
}

# Gọi hàm kiểm tra trang web
check_website
```

Hướng dẫn sử dụng:
- Lưu tập lệnh này vào một tệp, ví dụ `check_website.sh`.
- Đảm bảo tệp có quyền thực thi: `chmod +x check_website.sh`.
- Chạy tập lệnh với cú pháp: `./check_website.sh <URL> <timeout> <user-agent>`.
- Ví dụ: `./check_website.sh http://example.com 5 "Mozilla/5.0"`.

Tập lệnh này sẽ ghi kết quả kiểm tra vào tệp `website_status.log` với dấu thời gian. Nếu trang web không hoạt động, nó sẽ thử lại tối đa 3 lần trước khi ghi nhận là thất bại.
assistant