AGENT SKILL
nestjs-scheduling
Distributed cron jobs and locking patterns. Use when implementing scheduled tasks or distributed locking patterns in NestJS. (triggers: **/*.service.ts, @Cron, CronExpression, ScheduleModule)
- License 许可
- MIT
- 最近更新
- 2026-06-24
- Stars
- ★ 66
- Forks
- 24
01 前言 Front Matter
- name
- nestjs-scheduling
- description
- Distributed cron jobs and locking patterns. Use when implementing scheduled tasks or distributed locking patterns in NestJS. (triggers: **/*.service.ts, @Cron, CronExpression, ScheduleModule)
02 资源文件 10
- 参考文档references/coordinator_summary_contract.md1009 B
- 参考文档references/docs_generation_summary_contract.md535 B
- 参考文档references/docs_quality_contract.md2.2 KB
- 参考文档references/docs_quality_rules.json7.8 KB
- 参考文档references/docs_quality_rules.json.SOURCE.md1.3 KB
- 参考文档references/markdown_read_protocol.md1.5 KB
- 参考文档references/questions.md7.5 KB
- 参考文档references/storage_mode_detection.md2.0 KB
- 参考文档references/templates/kanban_board_template.md4.7 KB
- 参考文档references/templates/tasks_readme_template.md14.4 KB
03 SKILL.md 正文
Task Scheduling & Jobs
Priority: P1 (OPERATIONAL)
Background job processing and scheduled task patterns.
- Problem:
@Cron()runs on every instance. In K8s with 3 pods, your "Daily Report" runs 3 times. - Solution: Distributed Locking using Redis.
- Pattern: Using a decorator to wrap the cron method.
- Logic:
SET resource_name my_random_value NX PX 30000(Redis Atomic Set).
Cron Decorator Pattern
-
Implementation:
@Cron(CronExpression.EVERY_MINUTE) @DistributedLock({ key: 'send_emails', ttl: 5000 }) async handleCron() { // Only runs if lock acquired } -
Tools: Use
nestjs-redlockor custom Redis wrapper viaredlocklibrary.
Job Robustness
- Isolation: Never perform heavy processing inside the Cron handler.
- Pattern: Cron -> Push Job ID to Queue (BullMQ) -> Worker processes it.
- Why: Cron schedulers can get blocked by the Event Loop; Workers are scalable.
- Error Handling: Wrap ALL cron logic in
try/catch. Uncaught exceptions in a Cron job can crash the entire Node process.
Anti-Patterns
- No unguarded cron logic: Always wrap in
try/catch; uncaught exceptions crash the entire Node process. - No direct cron processing: Push to BullMQ queue; workers are scalable, cron handlers are not.
- No bare @Cron in multi-pod: Use distributed locking (redlock) to prevent duplicate concurrent runs.