Skip to main content
Schedule functions to execute at specific times using cron expressions.
modules::cron::CronModule

Sample Configuration

- class: modules::cron::CronModule
  config:
    adapter:
      class: modules::cron::RedisCronAdapter
      config:
        redis_url: ${REDIS_URL:redis://localhost:6379}

Configuration

adapter
Adapter
The adapter to use for distributed locking. Defaults to modules::cron::KvCronAdapter. Use RedisCronAdapter for multi-instance deployments.

Adapters

modules::cron::KvCronAdapter

When running multiple engine instances, KvCronAdapter does not provide reliable distributed locking — the same cron job may execute on every instance simultaneously. Use RedisCronAdapter for multi-instance deployments.
Built-in adapter using process-local locks. Suitable for single-instance deployments.
class: modules::cron::KvCronAdapter
config:
  lock_ttl_ms: 30000
  lock_index: cron_locks

Configuration

lock_ttl_ms
integer
Duration in milliseconds for which a lock is held before it expires. Defaults to 30000 (30 seconds).
lock_index
string
Key namespace used to store lock entries in the KV store. Defaults to cron_locks.

modules::cron::RedisCronAdapter

Uses Redis for distributed locking to prevent duplicate job execution across multiple engine instances.
class: modules::cron::RedisCronAdapter
config:
  redis_url: ${REDIS_URL:redis://localhost:6379}

Configuration

redis_url
string
The URL of the Redis instance to use for distributed locking.

Trigger Type

This Module adds a new Trigger Type: cron.

Sample Code

const fn = iii.registerFunction(
  { id: 'jobs::cleanupOldData' },
  async (event) => {
    console.log('Running cleanup scheduled at:', event.scheduled_time)
    return {}
  },
)

iii.registerTrigger({
  type: 'cron',
  function_id: fn.id,
  config: { expression: '0 0 2 * * *' },
})

Common Cron Expressions

ExpressionDescription
0 * * * * *Every minute
0 0 * * * *Every hour
0 0 0 * * *Every day at midnight
0 0 0 * * 0Every Sunday at midnight
0 0 2 * * *Every day at 2 AM
0 */5 * * * *Every 5 minutes
0 0 9-17 * * 1-5Every hour from 9 AM to 5 PM, Monday to Friday

Distributed Execution

When running multiple iii Engine instances, the Cron Module uses distributed locking to ensure jobs execute only once: