| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/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 "========== 自动续期完成 =========="
|