Apps

Schedules

Create and manage cron-style scheduled jobs attached to a Skytells app — define recurring tasks that run on a fixed schedule inside your app's container.

The Schedules page lets you define recurring jobs that run inside the app's container on a cron schedule. Skytells triggers the job at the defined interval by executing a command inside the running container — no external cron daemon, no separate worker service required.

What schedules are for

Schedules are a good fit for:

  • Sending digest emails or notifications at a fixed time
  • Cleaning up stale records or archiving old data
  • Refreshing a cache or syncing data from an external source
  • Running database migrations or aggregation queries on a timer
  • Health-check pings to external services

Schedules run inside the existing container. They do not spin up a separate container. If the app is stopped, schedules do not run. Make sure the app has status Running before relying on scheduled jobs.

Creating a schedule

Open the Schedules Page

Open Schedules from the app sidebar.

Add a Schedule

Select Add Schedule (or the + button).

Fill in the Schedule Details

Fill in the schedule details:

FieldDescription
NameA label for this job (e.g. Daily cleanup).
CommandThe command to execute inside the container (e.g. node scripts/cleanup.js or php artisan schedule:run).
Cron expressionWhen to run the job in standard cron format (see examples below).
TimezoneThe timezone to interpret the cron expression in (defaults to UTC).

Save the Schedule

Select Save. The schedule becomes active immediately.

Cron expression reference

The cron expression follows standard 5-field format:

┌───────────── minute (0–59)
│ ┌───────────── hour (0–23)
│ │ ┌───────────── day of month (1–31)
│ │ │ ┌───────────── month (1–12)
│ │ │ │ ┌───────────── day of week (0–7, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *
ExpressionMeaning
* * * * *Every minute
0 * * * *Every hour at the top of the hour
0 9 * * *Every day at 09:00 UTC
0 9 * * 1Every Monday at 09:00 UTC
0 0 1 * *First day of every month at midnight
*/15 * * * *Every 15 minutes
0 9,18 * * *Every day at 09:00 and 18:00 UTC

All cron expressions are interpreted in the timezone you select. If you pick UTC but your business logic expects local time, times will be off. Set the timezone explicitly when creating the schedule.

Viewing schedule execution history

Each schedule shows its next scheduled run time and the result of the last execution:

StatusMeaning
SuccessThe command exited with code 0.
FailedThe command exited with a non-zero code. Open the execution log to see the error output.
RunningThe job is currently executing.
SkippedThe previous run was still in progress when the next trigger fired — the new trigger was skipped to prevent overlap.

Pausing and deleting schedules

  • Pause a schedule to stop it from triggering without deleting the configuration.
  • Delete a schedule to permanently remove it.

Paused schedules appear in the list but are greyed out.

  • Logs — view runtime output from scheduled job execution.
  • Environment — make sure environment variables needed by the job are present.
  • Monitoring — watch CPU spikes that correlate with scheduled jobs.

How is this guide?

On this page