FlightControl
FlightControl Home

Introducing Flightcontrol long-running cron jobs and ad-hoc commands

Brandon Bayer

We’re Flightcontrol, the PaaS for deploying production apps that is uniquely best at the combo of reliability, flexibility, and performance. We achieve that with a simple, powerful interface that automates deployments to your own AWS account. Today we’re announcing that our Fargate scheduler job runner is generally available.

Scheduled and one-off tasks can be somewhat annoying things that almost every app eventually needs. Yes, you can deploy a traditional worker server with something like BullJS or Inngest, but sometimes that’s more overhead than you want, or maybe you need a dedicated container for a long-running, resource intensive task.

dashboard with job runner open

Each job runs in a dedicated container that starts and stops on-demand

When it’s time for your job to run, we automatically spin up a dedicated server via AWS Fargate that runs your job. Once completed, the server shuts down, so you only pay for execution time.

You can also trigger a new run on-demand, whether the job is scheduled or not.

Jobs can be long running

The default timeout is 8 hours, but it can be configured from 1 minute to 24 hours. 24 hours is a soft limit, reach out to us if you need longer.

When you might want to use our job runner

You have a long-running, resource intensive task that is best run in a temporary container

Even if you already have a worker system like Inngest, our job runner is well suited to resource intensive tasks. For example, a periodic job could require more CPU and memory than you normally need for the worker, causing it to be over-provisioned. By offloading that job to our scheduler service, it can have as much CPU and memory as needed, and your workers can be smaller and more efficient.

You need scheduled jobs but don’t already have a worker server

Our scheduler service is the easiest way to run scheduled jobs because it doesn’t require any custom code or libraries.

It’s also likely cheaper than running a dedicated worker if you don’t have many jobs or they don’t run often.

You want an easy way to trigger scripts on-demand

When adding a job, you can define a recurring schedule or require it to be manually triggered. This is a great way to run ad-hoc scripts in production as needed.

Features to make your life easier

As you’ll see below, we obsess over user experience. It wasn’t good enough to just ship a basic text box for the cron schedule. Creating a cron string can be frustrating, and we can make it better, so we did. It wasn’t good enough to just have schedules in UTC. Because you shouldn’t have to update your schedule twice a year to keep the same local time when DST kicks in.

Intuitive cron schedule input

It is a regular text box, but it’s supercharged with validation hints when a segment is focused. You also have 1-click presets for hourly, daily, weekly, and monthly.

the ui for entering cron schedule

Custom timezone

If you want to run a job at a certain local time year round, we have you covered with the ability to define the timezone for the job. You won’t have to worry about updating the schedule each time daylight savings time comes around.

the custom timezone selector

See important information at a glance

We show all the important information, like the execution history, the defined schedule, and when the job will next run.

ui showing next scheduled time, current schedule, and execution history

Complete logging

Our dashboard makes it easy to see all the logs, including build logs and logs for each job execution.

ui showing executions and their logs

Pause jobs

Sometimes you need to pause a job, and we make it easy to do.

ui with schedule paused and button to resume schedule

Parallel executions

Rest assured, you can have multiple jobs running in parallel since each job is executed in it’s own isolated container.

Customize CPU and memory per job

Each job can have a different resource configuration based on its own requirements.

select box with all the cpu and memory options

Multiple build source types

All our services support the following four build types, so you can use exactly the workflow that you want.

ui form with all the build options

Notifications

Get notified by email and/or Slack when any of your jobs execution fails. It contains a link to our dashboard, where you can view all the logs and see why it failed.

Sidecars for monitoring

For more advanced monitoring, you can add a sidecar container to send metrics to something like Datadog.

json configuration for a sidecar

Try it out!

Give it a try, and let us know if you have any issues or feedback! See the docs for more information.

Deploy apps with utmost reliability, flexibility & performance

Learn more
App screenshotApp screenshot