@skweb/cron
v2.0.0
Published
Cron model for skweb framework based on cron and cron-parser.
Readme
@skweb/cron
Cron task manager with distributed coordination support for skweb framework.
Installation
npm install @skweb/cronUsage
Standalone (single process)
const { CronApp, CronAction } = require('@skweb/cron')
// Define custom action
class MyAction extends CronAction {
async run(options, task) {
// Your task logic here
return { progress: 100 }
}
}
const app = new CronApp()
// Load actions
await app.loadActions('./actions')
// Load tasks
await app.taskMgr.loadTasks([
{
id: 'task1',
cronTime: '0 * * * *',
method: 'myAction',
options: { foo: 'bar' }
}
])
// Start
await app.start()
// Local task control
app.taskMgr.startTask('task1')
app.taskMgr.stopTask('task1')Distributed (multi-replica with Redis)
const { CronApp } = require('@skweb/cron')
const app = new CronApp({
redis: redisInstance, // RedisLike with subCh/publish/unsubCh + acquireLock/releaseLock/extendLock
channel: 'cron:task:cmd', // pub/sub channel for command bus
logger: console,
loadTasks: async () => await TaskModel.findAll({ raw: true }),
onSaveTask: async (taskData) => await TaskModel.upsert(taskData)
})
await app.loadActions('./actions')
await app.start()
// Distributed commands (published to all replicas via Redis pub/sub)
app.createTask({ id: 'task1', cronTime: '0 * * * *', method: 'myAction' })
app.startTask('task1')
app.stopTask('task1')
app.removeTask('task1')With @skweb/framework
const { CronFramework } = require('@skweb/framework')
const framework = new CronFramework({
loadTasks: async () => await TaskModel.findAll({ raw: true }),
onSaveTask: async (taskData) => await TaskModel.upsert(taskData)
})
await framework.setup({ cronActionsDir: './src/cron/actions' })
await framework.start()
// Access the underlying CronApp
framework.cronApp.createTask({ id: 'task1', cronTime: '0 * * * *', method: 'myAction' })License
MIT
