Node-cron Simple to Complex Setup with PM2
Cách tạo scheduled jobs với node-cron, phân biệt Express vs Worker processes, và quản lý với PM2 ecosystem
🧠 Khái Niệm Cơ Bản
1. Cron là gì?
Cron = Công cụ schedule tasks (jobs) chạy tự động theo lịch trên server.
Use cases:
node-cron là gì?
node-cron = JavaScript library để tạo cron jobs trong Node.js
So với Linux crontab:
Feature
Linux crontab
node-cron
Syntax
* * * * *
* * * * * (giống)
Language
Shell/Bash
JavaScript/Node.js
Database access
Khó
Dễ (Sequelize, etc)
Error handling
Khó
Dễ (try-catch)
Logging
File system
Winston, console
Deployment
System level
App level
Ví dụ:
2. Process vs Thread
Process = 1 chương trình đang chạy độc lập
Đặc điểm:
🔰 PHASE 1: Simple Cron (Console Log)
Mục tiêu: Hiểu cơ bản về cron
Step 1: Install
Step 2: Tạo Simple Worker
File: workers/simpleWorker.js
Step 3: Test
Output:
✅ Success! Bạn đã tạo cron job đầu tiên!
Press Ctrl+C để stop.
Step 4: Multiple Schedules
📝 PHASE 2: Database Integration
Mục tiêu: Ghi logs vào MySQL database
Step 1: Setup Database (ví dụ Sequelize)
Step 2: Tạo DB Worker
Step 3: Test DB Worker
Terminal 1: Run worker
Output:
Terminal 2: Check database
Result:
✅ Success! Worker đang ghi vào database!
🚀 PHASE 3: Production Worker
Mục tiêu: Tạo real-world email worker với error handling, retry logic
Architecture:
User → Express App → MySQL (job_queue table)
↓
Email Worker (cron)
↓
Mailgun API
Step 1: Database Schema
Table: job_queue
Step 2: Email Worker
File: workers/emailWorker.js
Express vs Worker Processes
Khái Niệm Cốt Lõi
Express App và Worker là 2 Node.js processes RIÊNG BIỆT:
Comparison Table
Aspect
Express App
Worker Process
File
app.js / server.js
workers/emailWorker.js
Purpose
Handle HTTP requests
Run background jobs
Port
Listen on port (3000)
No port needed
Triggered by
User requests
Cron schedule
Process
1 separate process
1 separate process
Memory
Own memory space
Own memory space
Crash impact
Only Express crashes
Only Worker crashes
Communication
Via MySQL/Redis
Via MySQL/Redis
Scaling
Multiple instances
Usually 1 instance
Đặc điểm:
Communication Flow
Key Points:
PM2 Ecosystem Management
PM2 là gì?
PM2 = Process Manager for Node.js
Chức năng:
Installation
Basic Commands
Ecosystem Config File
File: ecosystem.config.js (project root)
Usage with Ecosystem
Auto-Start on Server Boot
Test:
Log Management
Setup log rotation:
Result:
🐛 Troubleshooting
Issue 1: Cron Not Running
Symptoms:
Debug:
Solution:
Issue 2: Jobs Stuck in Processing
Symptoms:
Debug:
Solution:
Issue 3: Memory Leak
Symptoms:
Debug:
Solution:
Issue 4: Multiple Workers Running
Symptoms:
Debug:
Solution:
Issue 5: PM2 Not Auto-Starting on Boot
Symptoms:
Debug:
Solution:
🎓 Summary
Key Takeaways:
