#!/bin/bash
# ============================================
# Docker 容器定时重启一键安装脚本 (crontab版)
# 北京时间 早6点 和 晚6点 自动重启指定容器
# 【更改时区 + 时间同步检查 + 指定容器】
# ============================================

set -e

# ============================================
# ⬇⬇⬇ 用户配置区 - 修改这里 ⬇⬇⬇
# ============================================

# 要重启的容器名称，用空格分隔
CONTAINERS="v2b1 v2p1 v2f1"

# 执行时间（北京时间）
MORNING_HOUR=6
EVENING_HOUR=18

# ============================================
# ⬆⬆⬆ 用户配置区结束 ⬆⬆⬆
# ============================================

echo "🚀 开始安装 Docker 容器定时重启服务..."
echo ""
echo "📦 将要重启的容器: $CONTAINERS"
echo "⏰ 执行时间: 每天 ${MORNING_HOUR}:00 和 ${EVENING_HOUR}:00 (北京时间)"
echo ""

# ============================================
# 1. 设置系统时区为北京时间
# ============================================
echo "📍 设置系统时区为 Asia/Shanghai (北京时间)..."
timedatectl set-timezone Asia/Shanghai
echo "   ✓ 时区已设置为: $(timedatectl | grep 'Time zone' | awk '{print $3}')"
echo ""

# ============================================
# 2. 检查时间同步状态
# ============================================
echo "🕐 检查时间同步状态..."

SYNC_STATUS=$(timedatectl | grep "System clock synchronized" | awk '{print $4}')

if [[ "$SYNC_STATUS" == "yes" ]]; then
    echo "   ✓ 系统时钟已同步"
else
    echo "   ⚠ 系统时钟未同步，正在启用 NTP 时间同步..."
    timedatectl set-ntp true
    sleep 3
    SYNC_STATUS=$(timedatectl | grep "System clock synchronized" | awk '{print $4}')
    if [[ "$SYNC_STATUS" == "yes" ]]; then
        echo "   ✓ NTP 时间同步已启用并同步成功"
    else
        echo "   ⚠ NTP 已启用，但同步可能需要几分钟，请稍后检查"
    fi
fi

echo ""
echo "📅 当前时间: $(date '+%Y-%m-%d %H:%M:%S %Z')"
echo ""

# ============================================
# 3. 创建重启脚本
# ============================================
echo "📝 创建容器重启脚本..."

cat > /usr/local/bin/restart-containers.sh << EOF
#!/bin/bash
# ============================================
# 要重启的容器列表 - 修改这里可以更改重启的容器
# ============================================
CONTAINERS="$CONTAINERS"
# ============================================

LOG_FILE="/var/log/container-restart.log"

for CONTAINER in \$CONTAINERS; do
    if docker ps -q -f name="^\${CONTAINER}\$" | grep -q .; then
        docker restart "\$CONTAINER"
        echo "\$(date '+%Y-%m-%d %H:%M:%S'): Restarted container: \$CONTAINER" >> "\$LOG_FILE"
    else
        echo "\$(date '+%Y-%m-%d %H:%M:%S'): Container not running or not found: \$CONTAINER" >> "\$LOG_FILE"
    fi
done
EOF
chmod +x /usr/local/bin/restart-containers.sh
echo "   ✓ 脚本已创建: /usr/local/bin/restart-containers.sh"

# ============================================
# 4. 配置 crontab
# ============================================
echo ""
echo "⏰ 配置 crontab 定时任务..."

# 移除旧的定时任务
crontab -l 2>/dev/null | grep -v "restart-containers" | grep -v "restart-all-containers" > /tmp/crontab.tmp || true

# 添加新的定时任务
cat >> /tmp/crontab.tmp << EOF

# Docker容器定时重启 - 北京时间 ${MORNING_HOUR}:00 和 ${EVENING_HOUR}:00
# 重启容器: $CONTAINERS
0 $MORNING_HOUR * * * /usr/local/bin/restart-containers.sh
0 $EVENING_HOUR * * * /usr/local/bin/restart-containers.sh
EOF

crontab /tmp/crontab.tmp
rm /tmp/crontab.tmp

systemctl restart cron

echo "   ✓ 定时任务已配置"
echo ""

# ============================================
# 5. 显示结果
# ============================================
echo "============================================"
echo "✅ 安装完成！"
echo "============================================"
echo ""
echo "📦 重启容器: $CONTAINERS"
echo "📍 时区: Asia/Shanghai (北京时间)"
echo "🕐 时间同步: $SYNC_STATUS"
echo "⏰ 执行时间: 每天 ${MORNING_HOUR}:00 和 ${EVENING_HOUR}:00"
echo ""
echo "📋 crontab 配置："
crontab -l | grep -A1 "Docker容器"
echo ""
echo "============================================"
echo "常用命令："
echo "  手动执行:        /usr/local/bin/restart-containers.sh"
echo "  查看日志:        cat /var/log/container-restart.log"
echo "  修改容器列表:    vim /usr/local/bin/restart-containers.sh"
echo "  查看定时任务:    crontab -l"
echo "  查看时间状态:    timedatectl"
echo "============================================"
