bash
vim 260825.sh
bash
#!/bin/bash
# 计算到目标时间的秒数并 sleep
target_time="2026-08-25 00:00:00"
current_time=$(date +%s)
target_seconds=$(date -d "$target_time" +%s)
sleep_time=$((target_seconds - current_time))
if [ $sleep_time -gt 0 ]; then
sleep $sleep_time
cd /.../nginx/ && docker-compose down
cd /.../app/ && docker-compose down
fi
# 上面的版本已实践能用,下面的没实践过
#!/bin/bash
# 计算到目标时间的秒数并 sleep
target_time="2026-08-25 00:00:00"
current_time=$(date +%s)
target_seconds=$(date -d "$target_time" +%s)
sleep_time=$((target_seconds - current_time))
if [ $sleep_time -gt 0 ]; then
echo "当前时间: $(date)"
echo "目标时间: $target_time"
echo "等待 $((sleep_time / 3600)) 小时 $(( (sleep_time % 3600) / 60 )) 分钟后执行..."
sleep $sleep_time
echo "开始停止服务..."
# 停止 nginx 服务
echo " 停止 nginx..."
cd /.../nginx/ && docker-compose down
# 停止 app 服务
echo " 停止 app..."
cd /.../app/ && docker-compose down
echo "所有服务已停止于 $(date)"
else
echo "目标时间已过,不执行任何操作"
exit 1
fi
bash
chmod +x 260825.sh
注意cd /.../nginx/ && docker-compose down这里的/.../nginx/需要有docker-compose.yml
bash
nohup ./260825.sh > 260825.log 2>&1 &
后续系统就会自动等待到指定时间,执行docker-compose down,比如上面的脚本我是260824启动的,到了260825000000就会执行并输出日志(可通过日志的创建时间与修改时间、内容判断执行时间)

bash
cat 260824.log

可用命令查看是否启动成功
bash
ps aux | grep 260825.sh
ps aux | grep sleep
ps aux | grep sleep | grep -v grep