本文目录导读:

Python 脚本版本
#!/usr/bin/env python3
"""
Zendesk 缓存自动清理脚本
支持多种缓存清理方式
"""
import requests
import json
import time
from datetime import datetime
import logging
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
class ZendeskCacheCleaner:
def __init__(self, subdomain, email, api_token):
"""
初始化 Zendesk 缓存清理器
:param subdomain: Zendesk 子域名
:param email: 管理员邮箱
:param api_token: API Token
"""
self.base_url = f"https://{subdomain}.zendesk.com"
self.auth = (f"{email}/token", api_token)
self.headers = {
"Content-Type": "application/json"
}
def clear_cache(self, cache_type='all'):
"""
清除 Zendesk 缓存
:param cache_type: 缓存类型 ('all', 'ticket', 'user', 'organization')
:return: bool
"""
try:
endpoints = {
'all': '/api/v2/cache/clear.json',
'ticket': '/api/v2/cache/clear/tickets.json',
'user': '/api/v2/cache/clear/users.json',
'organization': '/api/v2/cache/clear/organizations.json'
}
if cache_type not in endpoints:
logger.error(f"不支持的缓存类型: {cache_type}")
return False
url = self.base_url + endpoints[cache_type]
response = requests.delete(url, auth=self.auth, headers=self.headers)
if response.status_code == 200:
logger.info(f"成功清除 {cache_type} 缓存")
return True
else:
logger.error(f"清除失败: {response.status_code} - {response.text}")
return False
except Exception as e:
logger.error(f"清除缓存异常: {str(e)}")
return False
def verify_cache_status(self):
"""
验证缓存状态
"""
try:
url = f"{self.base_url}/api/v2/cache.json"
response = requests.get(url, auth=self.auth, headers=self.headers)
if response.status_code == 200:
cache_info = response.json()
logger.info(f"当前缓存状态: {json.dumps(cache_info, indent=2)}")
return cache_info
else:
logger.error(f"获取缓存状态失败: {response.status_code}")
return None
except Exception as e:
logger.error(f"获取缓存状态异常: {str(e)}")
return None
def scheduled_clean(subdomain, email, api_token, interval_hours=24):
"""
定时清理缓存
:param subdomain: Zendesk 子域名
:param email: 管理员邮箱
:param api_token: API Token
:param interval_hours: 清理间隔(小时)
"""
cleaner = ZendeskCacheCleaner(subdomain, email, api_token)
while True:
try:
logger.info(f"开始定时清理 - {datetime.now()}")
# 清除所有缓存
if cleaner.clear_cache('all'):
# 验证清理结果
cleaner.verify_cache_status()
logger.info(f"等待 {interval_hours} 小时后再次清理...")
time.sleep(interval_hours * 3600)
except KeyboardInterrupt:
logger.info("定时清理任务已停止")
break
except Exception as e:
logger.error(f"定时清理异常: {str(e)}")
time.sleep(3600) # 出错后等待1小时重试
def main():
"""
主函数
"""
# 配置信息 - 请替换为实际值
CONFIG = {
'subdomain': 'your_subdomain', # 替换为你的子域名
'email': 'admin@example.com', # 替换为管理员邮箱
'api_token': 'your_api_token', # 替换为 API Token
'interval_hours': 24 # 清理间隔(小时)
}
cleaner = ZendeskCacheCleaner(
CONFIG['subdomain'],
CONFIG['email'],
CONFIG['api_token']
)
# 手动清理
logger.info("开始手动清理缓存...")
cleaner.clear_cache('all')
# 验证缓存状态
cache_status = cleaner.verify_cache_status()
# 可选:启动定时清理
# scheduled_clean(
# CONFIG['subdomain'],
# CONFIG['email'],
# CONFIG['api_token'],
# CONFIG['interval_hours']
# )
if __name__ == "__main__":
main()
Bash Shell 脚本版本
#!/bin/bash
# Zendesk 缓存自动清理脚本
# 适用于 Linux/Unix 系统
# 配置变量
ZENDESK_SUBDOMAIN="your_subdomain"
ZENDESK_EMAIL="admin@example.com"
ZENDESK_API_TOKEN="your_api_token"
# 日志文件
LOG_FILE="/var/log/zendesk_cache_clean.log"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_message() {
local level=$1
local message=$2
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
case $level in
"INFO")
echo -e "${GREEN}[${timestamp}] [INFO] ${message}${NC}" | tee -a $LOG_FILE
;;
"WARN")
echo -e "${YELLOW}[${timestamp}] [WARN] ${message}${NC}" | tee -a $LOG_FILE
;;
"ERROR")
echo -e "${RED}[${timestamp}] [ERROR] ${message}${NC}" | tee -a $LOG_FILE
;;
*)
echo "[${timestamp}] [${level}] ${message}" | tee -a $LOG_FILE
;;
esac
}
# 清理缓存函数
clear_zendesk_cache() {
local cache_type=$1
local endpoint=""
case $cache_type in
"all")
endpoint="/api/v2/cache/clear.json"
;;
"tickets")
endpoint="/api/v2/cache/clear/tickets.json"
;;
"users")
endpoint="/api/v2/cache/clear/users.json"
;;
"organizations")
endpoint="/api/v2/cache/clear/organizations.json"
;;
*)
log_message "ERROR" "不支持的缓存类型: $cache_type"
return 1
;;
esac
local url="https://${ZENDESK_SUBDOMAIN}.zendesk.com${endpoint}"
log_message "INFO" "开始清除 ${cache_type} 缓存..."
# 发送 API 请求
response=$(curl -s -o /dev/null -w "%{http_code}" \
-X DELETE \
-u "${ZENDESK_EMAIL}/token:${ZENDESK_API_TOKEN}" \
-H "Content-Type: application/json" \
"$url")
if [ "$response" -eq 200 ]; then
log_message "INFO" "成功清除 ${cache_type} 缓存"
return 0
else
log_message "ERROR" "清除 ${cache_type} 缓存失败,HTTP状态码: $response"
return 1
fi
}
# 获取缓存状态
get_cache_status() {
local url="https://${ZENDESK_SUBDOMAIN}.zendesk.com/api/v2/cache.json"
log_message "INFO" "获取缓存状态..."
response=$(curl -s \
-X GET \
-u "${ZENDESK_EMAIL}/token:${ZENDESK_API_TOKEN}" \
-H "Content-Type: application/json" \
"$url")
if [ $? -eq 0 ]; then
log_message "INFO" "缓存状态: $response"
return 0
else
log_message "ERROR" "获取缓存状态失败"
return 1
fi
}
# 主清理流程
main_cleanup() {
log_message "INFO" "========== 开始 Zendesk 缓存清理 =========="
# 获取清理前的缓存状态
get_cache_status
# 清理所有缓存
clear_zendesk_cache "all"
# 清理特定缓存
clear_zendesk_cache "tickets"
clear_zendesk_cache "users"
clear_zendesk_cache "organizations"
# 获取清理后的缓存状态
get_cache_status
log_message "INFO" "========== Zendesk 缓存清理完成 =========="
}
# 定时清理(使用 cron)
setup_cron() {
local interval_hours=$1
log_message "INFO" "设置定时清理任务(每 ${interval_hours} 小时执行一次)"
# 添加 cron 任务
cron_command="0 */${interval_hours} * * * /path/to/$(basename $0) cleanup"
# 检查是否已存在相同的 cron 任务
if crontab -l 2>/dev/null | grep -q "zendesk_cache_clean"; then
log_message "INFO" "已存在定时清理任务"
else
(crontab -l 2>/dev/null; echo "$cron_command") | crontab -
log_message "INFO" "已添加定时清理任务"
fi
}
# 主函数
main() {
# 检查配置
if [ "$ZENDESK_SUBDOMAIN" = "your_subdomain" ]; then
log_message "ERROR" "请先配置 Zendesk 子域名"
exit 1
fi
case "${1:-cleanup}" in
"cleanup")
main_cleanup
;;
"status")
get_cache_status
;;
"setup-cron")
setup_cron "${2:-24}"
;;
*)
echo "使用方法: $0 [cleanup|status|setup-cron]"
echo " cleanup - 执行缓存清理(默认)"
echo " status - 查看缓存状态"
echo " setup-cron - 设置定时清理(可选参数:间隔小时数,默认24)"
exit 1
;;
esac
}
# 执行主函数
main "$@"
配置说明
获取 API Token:
- 登录 Zendesk Admin Center
- 转到 Apps and integrations > Zendesk API
- 启用 Token Access
- 创建新的 API Token
使用方式:
Python 脚本:
# 安装依赖 pip install requests # 修改配置文件中的参数 # 运行脚本 python zendesk_cache_clean.py
Bash 脚本:
# 赋予执行权限 chmod +x zendesk_clean.sh # 执行清理 ./zendesk_clean.sh cleanup # 查看缓存状态 ./zendesk_clean.sh status # 设置24小时间隔的定时清理 ./zendesk_clean.sh setup-cron 24
注意事项
- 权限要求:需要 Zendesk 管理员权限
- API 限制:注意 Zendesk API 调用频率限制
- 缓存影响:清理缓存可能暂时影响系统性能
- 测试环境:建议先在测试环境验证
- 备份配置:重要操作前备份相关配置
请根据实际需求修改配置参数和清理策略。