echoapi-cron-scheduler
Version:
A Node.js cron scheduler for managing and executing scheduled tasks.
136 lines (92 loc) • 3.71 kB
Markdown
# CronScheduler
`CronScheduler` is a Node.js-based cron scheduler library that allows you to manage, execute, and monitor scheduled jobs. It can handle cron expressions, load jobs from a file, create new jobs, and handle job cancellation or restart.
## Features
- Supports cron expressions for flexible scheduling.
- Can schedule jobs based on preset cycles (minute, hour, day, week).
- Jobs can be loaded, created, canceled, or restarted.
- Supports graceful shutdown and reporting of job status.
- Jobs are stored in a local JSON file.
## Installation
1. Clone this repository or install it via npm:
```bash
npm install echoapi-cron-scheduler
````
2. If you're using the GitHub repository, run:
```bash
git clone https://github.com/Apipo/echoapi-cron-scheduler.git
cd echoapi-cron-scheduler
npm install
```
## Usage
### Basic Usage
First, import the `CronScheduler` class and create an instance:
```javascript
const CronScheduler = require('echoapi-cron-scheduler');
const scheduler = new CronScheduler();
```
### Creating and Running Jobs
To create a new job, use the `createJob` method. It will store the job in a JSON file and execute the job based on the schedule provided.
```javascript
const { option, test_events } = require('./tmp/request');
const { v4: uuidv4 } = require('uuid');
// Set a unique job ID
_.set(option, 'job_id', uuidv4());
// Create the job
scheduler.createJob(option, test_events);
// Load all jobs and start executing them
scheduler.loadJobs();
```
### Start Job with Cron Expression
You can start a job using a cron expression:
```javascript
scheduler.startJob('* * * * * *', 'exampleJob1', async () => {
console.log('Executing job every minute...');
});
```
This will execute the job every minute.
### Canceling and Restarting Jobs
To cancel a running job, use `cancelJob`:
```javascript
scheduler.cancelJob('exampleJob1');
```
To restart a job, use `restartJob`:
```javascript
scheduler.restartJob('exampleJob1');
```
### Retrieving Job Information
You can retrieve a list of all scheduled jobs, including their current states (e.g., whether they are running):
```javascript
const allJobs = scheduler.getAllJobs();
console.log(allJobs);
```
### Graceful Shutdown
You can handle a graceful shutdown of all scheduled jobs by listening for `SIGINT`:
```javascript
process.on('SIGINT', () => {
scheduler.gracefulShutdown().then(() => { process.exit(0) });
});
```
## Cron Expression Examples
Here are some cron expression examples you can use to schedule tasks:
* `* * * * * *` — Every second
* `*/5 * * * * *` — Every 5 seconds
* `0 * * * * *` — Every minute
* `0 0 * * * *` — Every hour
* `0 0 0 * * *` — Every day at midnight
* `0 0 * * 1 *` — Every Monday at midnight
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
```
### Explanation
1. **`package.json`**:
- Defines the necessary dependencies (`node-schedule`, `axios`, `lodash`, `cron-parser`, etc.).
- A basic `start` script that runs the main file (`index.js`).
- Set the Node.js engine to ensure compatibility with the required Node version.
2. **`README.md`**:
- Provides a basic overview of the CronScheduler.
- Describes installation steps and usage examples for creating, managing, and executing cron jobs.
- Includes explanations for cron expressions and how to handle graceful shutdowns.
### To Use This Project:
1. Clone the repository or install the package using `npm`.
2. Include your scheduler logic and job definitions in the `index.js` or another entry point.
3. Use the provided `createJob`, `startJob`, `cancelJob`, and other methods to interact with scheduled jobs.