Automated backup - 20250729_000001
This commit is contained in:
68
shutdown_docker_services.sh
Executable file
68
shutdown_docker_services.sh
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user