Files
docker-configs/shutdown_docker_services.sh
2025-07-29 00:00:01 -05:00

68 lines
2.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Docker 服务关机前停止脚本
# 用于在系统重启/关机前优雅地停止所有 Docker 服务
echo "$(date): 开始停止 Docker 服务..." | tee -a /var/log/docker-shutdown.log
# Docker 服务目录列表(除了 gitea
DOCKER_DIRS=(
"/home/will/docker/caddy"
"/home/will/docker/navidrome"
"/home/will/docker/jellyfin"
"/home/will/docker/1panel"
"/home/will/docker/silly"
"/home/will/docker/vault"
"/home/will/docker/HA"
"/home/will/docker/clove"
"/home/will/docker/discord_bot"
"/home/will/docker/discord_bot/ai_bots"
"/home/will/docker/adwireguard"
# "/home/will/docker/backtest" # 手动启动
)
# 函数:优雅停止 Docker Compose 服务
stop_docker_service() {
local dir="$1"
if [[ -f "$dir/docker-compose.yml" ]]; then
echo "$(date): 停止服务: $dir" | tee -a /var/log/docker-shutdown.log
cd "$dir"
# 使用 timeout 防止卡住
timeout 60 docker compose down
if [[ $? -eq 0 ]]; then
echo "$(date): 成功停止: $dir" | tee -a /var/log/docker-shutdown.log
else
echo "$(date): 停止失败或超时: $dir" | tee -a /var/log/docker-shutdown.log
# 强制停止
docker compose kill
fi
else
echo "$(date): 跳过 (无 docker-compose.yml): $dir" | tee -a /var/log/docker-shutdown.log
fi
}
# 停止所有服务
for dir in "${DOCKER_DIRS[@]}"; do
if [[ -d "$dir" ]]; then
stop_docker_service "$dir"
else
echo "$(date): 目录不存在: $dir" | tee -a /var/log/docker-shutdown.log
fi
# 每个服务之间等待2秒
sleep 2
done
# 清理孤立的容器和网络
echo "$(date): 清理孤立的容器和网络..." | tee -a /var/log/docker-shutdown.log
docker container prune -f
docker network prune -f
# 停止 Docker 守护进程(可选)
echo "$(date): 停止 Docker 守护进程..." | tee -a /var/log/docker-shutdown.log
systemctl stop docker
echo "$(date): Docker 服务停止完成" | tee -a /var/log/docker-shutdown.log