78 lines
2.8 KiB
Bash
Executable File
78 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Docker 服务开机后启动脚本
|
||
# 用于在系统启动后自动启动所有 Docker 服务
|
||
|
||
echo "$(date): 开始启动 Docker 服务..." | tee -a /var/log/docker-startup.log
|
||
|
||
# 等待 Docker 守护进程启动
|
||
echo "$(date): 等待 Docker 守护进程启动..." | tee -a /var/log/docker-startup.log
|
||
while ! docker info >/dev/null 2>&1; do
|
||
echo "$(date): Docker 守护进程尚未就绪,等待5秒..." | tee -a /var/log/docker-startup.log
|
||
sleep 5
|
||
done
|
||
|
||
echo "$(date): Docker 守护进程已就绪" | tee -a /var/log/docker-startup.log
|
||
|
||
# Docker 服务目录列表(按优先级排序)
|
||
DOCKER_DIRS=(
|
||
"/home/will/docker/caddy" # 反向代理,最先启动
|
||
"/home/will/docker/vault" # 密码管理
|
||
"/home/will/docker/HA" # Home Assistant
|
||
"/home/will/docker/clove" # 文件管理
|
||
"/home/will/docker/navidrome" # 音乐服务
|
||
"/home/will/docker/jellyfin" # 媒体服务
|
||
"/home/will/docker/1panel" # 管理面板
|
||
"/home/will/docker/silly" # AI 对话
|
||
"/home/will/docker/discord_bot" # Discord 主机器人
|
||
"/home/will/docker/discord_bot/ai_bots" # AI 机器人(如果需要)
|
||
"/home/will/docker/adwireguard" # VPN 服务
|
||
# "/home/will/docker/backtest" # 回测服务 - 手动启动
|
||
)
|
||
|
||
# 函数:启动 Docker Compose 服务
|
||
start_docker_service() {
|
||
local dir="$1"
|
||
|
||
if [[ -f "$dir/docker-compose.yml" ]]; then
|
||
echo "$(date): 启动服务: $dir" | tee -a /var/log/docker-startup.log
|
||
cd "$dir"
|
||
|
||
# 使用 timeout 防止卡住,adwireguard 需要更长时间
|
||
if [[ "$dir" == *"adwireguard"* ]]; then
|
||
timeout 180 docker compose up -d
|
||
else
|
||
timeout 120 docker compose up -d
|
||
fi
|
||
|
||
if [[ $? -eq 0 ]]; then
|
||
echo "$(date): 成功启动: $dir" | tee -a /var/log/docker-startup.log
|
||
else
|
||
echo "$(date): 启动失败或超时: $dir" | tee -a /var/log/docker-startup.log
|
||
fi
|
||
else
|
||
echo "$(date): 跳过 (无 docker-compose.yml): $dir" | tee -a /var/log/docker-startup.log
|
||
fi
|
||
}
|
||
|
||
# 启动所有服务
|
||
for dir in "${DOCKER_DIRS[@]}"; do
|
||
if [[ -d "$dir" ]]; then
|
||
start_docker_service "$dir"
|
||
else
|
||
echo "$(date): 目录不存在: $dir" | tee -a /var/log/docker-startup.log
|
||
fi
|
||
|
||
# 每个服务之间等待5秒,让服务有时间启动
|
||
sleep 5
|
||
done
|
||
|
||
# 清理未使用的资源
|
||
echo "$(date): 清理未使用的Docker资源..." | tee -a /var/log/docker-startup.log
|
||
docker image prune -f
|
||
|
||
echo "$(date): Docker 服务启动完成" | tee -a /var/log/docker-startup.log
|
||
|
||
# 显示运行状态
|
||
echo "$(date): 当前运行的容器:" | tee -a /var/log/docker-startup.log
|
||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | tee -a /var/log/docker-startup.log |