外观
定时任务
请在 schedules 目录下撰写你的定时任务脚本。撰写完成后,将其引入到 schedules/index.mts 文件中并在 schedules/index.mts 中定义具体的执行周期。像下面这样:
typescript
import schedule from "node-schedule";
import { jobOptimizeBugsTable } from "#schedules/jobOptimizeBugsTables";
import { jobBugsStatistics } from "#schedules/jobBugsStatistics";
export const doScheduleJobs = async () => {
await schedule.gracefulShutdown();
// 每天凌晨1点,刷新一次统计数据
schedule.scheduleJob({ hour: 1, minute: 0 }, () => {
jobBugsStatistics();
});
// 每天凌晨2点,做一次表格优化操作
schedule.scheduleJob({ hour: 2, minute: 0 }, () => {
jobOptimizeBugsTable();
});
};1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
然后只要主程序在运行,上述定时任务就会如期进行。
现有定时任务列表
1. Bug 统计数据任务(jobBugsStatistics)
- 执行频率:每 10 分钟执行一次
- 功能:刷新 Bug 统计数据
- 文件位置:
schedules/jobBugsStatistics.mts
2. 数据库表优化任务(jobOptimizeBugsTable)
- 执行频率:每天凌晨 1 点执行
- 功能:优化数据库表格,提升查询性能
- 文件位置:
schedules/jobOptimizeBugsTables.mts
3. 限制记录数量任务(jobBugsLimitRecords)
- 执行频率:每 10 分钟执行一次
- 功能:清理日志类数据库表中的旧记录,避免数据量过大
- 文件位置:
schedules/jobBugsLimitRecords.mts
4. PPT 任务状态更新(jobPPTTaskUpdateStatus)
- 执行频率:每 10 秒钟执行一次(仅在生产环境或开发环境)
- 功能:处理 PPT 任务状态更新
- 文件位置:
schedules/jobPPTTask.mts
5. SSL 证书自动续签任务(jobSSLCertRenewal)
- 执行频率:每天凌晨 2 点执行
- 功能:自动检测指定域名的 SSL 证书过期时间,若剩余有效期 ≤ 30 天,自动通过 Let's Encrypt 续签免费证书
- 文件位置:
schedules/jobSSLCertRenewal.mts
功能特性
- ✅ 支持配置多域名
- ✅ 通过 TLS 连接检测证书过期时间
- ✅ 自动续签即将过期的证书(默认提前 30 天)
- ✅ 使用 Let's Encrypt 免费证书
- ✅ 通过 HTTP-01 验证完成挑战
- ✅ 完善的错误处理和日志记录
- ✅ 支持测试/生产环境切换
配置说明
在 schedules/jobSSLCertRenewal.mts 文件中的 SSL_DOMAIN_CONFIGS 数组中配置域名信息:
typescript
const SSL_DOMAIN_CONFIGS: SSLDomainConfig[] = [
{
domain: "example.com", // 域名
email: "admin@example.com", // 管理员邮箱
webroot: "/var/www/html", // 网站根目录(HTTP 验证用)
certPath: "/etc/nginx/certificates/example.com/cert.pem", // 证书文件路径
keyPath: "/etc/nginx/certificates/example.com/key.pem", // 私钥文件路径
accountKeyPath: "/etc/nginx/certificates/account.key", // 账户私钥路径(可选,用于复用账户)
renewDaysBeforeExpiry: 30, // 提前续签天数(可选,默认 30 天)
},
];1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
使用前准备
安装依赖:
bashnpm install acme-client1确保环境配置:
- 80 端口可访问(HTTP-01 验证需要)
- 网站根目录有写入权限
- 证书目录有写入权限
配置域名信息: 在
schedules/jobSSLCertRenewal.mts中配置需要管理的域名
环境切换
定时任务会根据 MODE 环境变量自动选择 Let's Encrypt 环境:
- 生产环境(
MODE === "production"):使用 Let's Encrypt 正式环境 - 其他环境:使用 Let's Encrypt 测试环境(避免触发正式环境的频率限制)
注意事项
- 首次运行前需要安装
acme-client库 - 确保 80 端口可访问,Let's Encrypt 需要通过 HTTP 访问验证文件
- 确保证书目录和网站根目录有适当的写入权限
- 建议在测试环境先验证功能正常后再部署到生产环境
- 账户私钥建议保存,以便复用账户(避免重复创建账户)
- 验证文件会在
.well-known/acme-challenge/目录下创建,建议在确认证书生效后手动清理