Files
ssl-manager/scripts/auto-renew.sh
T
2026-04-08 17:52:38 +08:00

62 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
#############################################
# SSL 证书自动续期脚本
# 建议添加到 crontab: 0 0 * * * /path/to/auto-renew.sh
#############################################
set -e
# 配置
ACME_PATH="/root/.acme.sh"
LOG_FILE="/var/log/ssl-manager/renew.log"
NOTIFY_EMAIL="" # 可选:续期失败时发送邮件通知
# 创建日志目录
mkdir -p $(dirname "$LOG_FILE")
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "========== 开始自动续期 =========="
# 检查 acme.sh 是否安装
if [ ! -f "$ACME_PATH/acme.sh" ]; then
log "错误:acme.sh 未安装,请先运行安装脚本"
exit 1
fi
# 执行续期
log "执行 acme.sh --renew-all"
cd "$ACME_PATH"
if ./acme.sh --renew-all --cron --home "$ACME_PATH" >> "$LOG_FILE" 2>&1; then
log "✓ 续期成功完成"
# 重载 Web 服务器(如果使用 nginx)
if command -v nginx &> /dev/null; then
log "重载 nginx 配置..."
nginx -s reload 2>> "$LOG_FILE" || log "警告:nginx 重载失败"
fi
# 重载 Apache(如果使用)
if command -v apache2ctl &> /dev/null; then
log "重载 Apache 配置..."
apache2ctl graceful 2>> "$LOG_FILE" || log "警告:Apache 重载失败"
fi
else
log "✗ 续期失败,请检查日志"
# 发送通知邮件(如果配置了)
if [ -n "$NOTIFY_EMAIL" ] && command -v mail &> /dev/null; then
echo "SSL 证书续期失败,请检查日志:$LOG_FILE" | \
mail -s "[警告] SSL 证书续期失败" "$NOTIFY_EMAIL"
fi
exit 1
fi
log "========== 自动续期完成 =========="