auto-renew.sh 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/bin/bash
  2. #############################################
  3. # SSL 证书自动续期脚本
  4. # 建议添加到 crontab: 0 0 * * * /path/to/auto-renew.sh
  5. #############################################
  6. set -e
  7. # 配置
  8. ACME_PATH="/root/.acme.sh"
  9. LOG_FILE="/var/log/ssl-manager/renew.log"
  10. NOTIFY_EMAIL="" # 可选:续期失败时发送邮件通知
  11. # 创建日志目录
  12. mkdir -p $(dirname "$LOG_FILE")
  13. log() {
  14. echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
  15. }
  16. log "========== 开始自动续期 =========="
  17. # 检查 acme.sh 是否安装
  18. if [ ! -f "$ACME_PATH/acme.sh" ]; then
  19. log "错误:acme.sh 未安装,请先运行安装脚本"
  20. exit 1
  21. fi
  22. # 执行续期
  23. log "执行 acme.sh --renew-all"
  24. cd "$ACME_PATH"
  25. if ./acme.sh --renew-all --cron --home "$ACME_PATH" >> "$LOG_FILE" 2>&1; then
  26. log "✓ 续期成功完成"
  27. # 重载 Web 服务器(如果使用 nginx)
  28. if command -v nginx &> /dev/null; then
  29. log "重载 nginx 配置..."
  30. nginx -s reload 2>> "$LOG_FILE" || log "警告:nginx 重载失败"
  31. fi
  32. # 重载 Apache(如果使用)
  33. if command -v apache2ctl &> /dev/null; then
  34. log "重载 Apache 配置..."
  35. apache2ctl graceful 2>> "$LOG_FILE" || log "警告:Apache 重载失败"
  36. fi
  37. else
  38. log "✗ 续期失败,请检查日志"
  39. # 发送通知邮件(如果配置了)
  40. if [ -n "$NOTIFY_EMAIL" ] && command -v mail &> /dev/null; then
  41. echo "SSL 证书续期失败,请检查日志:$LOG_FILE" | \
  42. mail -s "[警告] SSL 证书续期失败" "$NOTIFY_EMAIL"
  43. fi
  44. exit 1
  45. fi
  46. log "========== 自动续期完成 =========="