Skillshub 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)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/nestjs-scheduling" ~/.claude/skills/comeonoliver-skillshub-nestjs-scheduling && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/nestjs-scheduling/SKILL.mdsource content
Task Scheduling & Jobs
Priority: P1 (OPERATIONAL)
Background job processing and scheduled task patterns.
- Problem:
runs on every instance. In K8s with 3 pods, your "Daily Report" runs 3 times.@Cron() - Solution: Distributed Locking using Redis.
- Pattern: Using a decorator to wrap the cron method.
- Logic:
(Redis Atomic Set).SET resource_name my_random_value NX PX 30000
Cron Decorator Pattern
-
Implementation:
@Cron(CronExpression.EVERY_MINUTE) @DistributedLock({ key: 'send_emails', ttl: 5000 }) async handleCron() { // Only runs if lock acquired } -
Tools: Use
or custom Redis wrapper vianestjs-redlock
library.redlock
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
. Uncaught exceptions in a Cron job can crash the entire Node process.try/catch
Anti-Patterns
- No unguarded cron logic: Always wrap in
; uncaught exceptions crash the entire Node process.try/catch - 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.