nestjs-scheduling
Installation
SKILL.md
Task Scheduling & Jobs
Priority: P1 (OPERATIONAL)
Workflow: Add Scheduled Task
- Register ScheduleModule — Import
ScheduleModule.forRoot()in AppModule. - Create cron handler — Decorate service method with
@Cron(CronExpression.*). - Add distributed lock — Apply Redis lock decorator to prevent multi-pod duplication.
- Offload heavy work — Push job IDs to BullMQ; let workers process them.
- Wrap in try/catch — Uncaught exceptions in cron handlers crash entire Node process.
- Verify — Test with 2+ instances to confirm only one acquires lock.
Problem & Solution
- Problem:
@Cron()runs on every instance. In K8s with 3 pods, your "Daily Report" runs 3 times. - Solution: Distributed Locking using Redis.
- Pattern: Using decorator to wrap cron method.
- Logic:
SET resource_name my_random_value NX PX 30000(Redis Atomic Set).