# Cron Job

> Cron job with schedule expression, timezone, and run tracking.

- Name: `cron-job`
- Categories: infrastructure
- Detail page: https://open-types.dev/types/cron-job

## Install

```bash
# Types only
npx shadcn add @open-types/cron-job

# Types + Zod v4 validators
npx shadcn add @open-types/cron-job-zod

# Types + real-world examples
npx shadcn add @open-types/cron-job-examples
```

## Types

```typescript
export interface CronSchedule {
  expression: string;
  timezone?: string;
}

export interface CronJob {
  name: string;
  schedule: CronSchedule;
  command?: string;
  enabled: boolean;
  last_run?: string;
  next_run?: string;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type { CronJob, CronSchedule } from "../types/cron-job";

export const cronScheduleSchema = z.object({
  expression: z.string().min(1, { error: "Cron expression is required" }),
  timezone: z.string().optional(),
}) satisfies z.ZodType<CronSchedule>;

export const cronJobSchema = z.object({
  name: z.string().min(1, { error: "Job name is required" }),
  schedule: cronScheduleSchema,
  command: z.string().optional(),
  enabled: z.boolean(),
  last_run: z.iso.datetime({ error: "Invalid last_run timestamp" }).optional(),
  next_run: z.iso.datetime({ error: "Invalid next_run timestamp" }).optional(),
}) satisfies z.ZodType<CronJob>;

export type { CronJob, CronSchedule } from "../types/cron-job";
```

## Examples

```typescript
// Source: hand-crafted
import type { CronSchedule, CronJob } from "../types/cron-job";

export const cronScheduleExamples = {
  everyMinute: { expression: "* * * * *" } satisfies CronSchedule,
  hourly: { expression: "0 * * * *", timezone: "UTC" } satisfies CronSchedule,
  dailyMidnight: { expression: "0 0 * * *", timezone: "America/New_York" } satisfies CronSchedule,
  weeklyMonday: { expression: "0 9 * * MON", timezone: "Europe/London" } satisfies CronSchedule,
  monthlyFirst: { expression: "0 0 1 * *", timezone: "UTC" } satisfies CronSchedule,
} as const;

const nightlyBackup = {
  name: "nightly-backup",
  schedule: { expression: "0 2 * * *", timezone: "UTC" },
  command: "node scripts/backup.js",
  enabled: true,
  last_run: "2026-05-16T02:00:00Z",
  next_run: "2026-05-17T02:00:00Z",
} as const satisfies CronJob;

export const cronJobExamples = {
  nightlyBackup,
  disabled: { ...nightlyBackup, name: "old-cleanup", enabled: false } satisfies CronJob,
  neverRun: {
    name: "new-job",
    schedule: { expression: "0 9 * * MON" },
    enabled: true,
    next_run: "2026-05-18T09:00:00Z",
  } satisfies CronJob,
  minimal: {
    name: "ping",
    schedule: { expression: "* * * * *" },
    enabled: true,
  } satisfies CronJob,
} as const;
```
