Run reliable scheduled tasks on Fly.io across all regions without infrastructure complexity. Get global distributed cron jobs, edge coordination, and built-in monitoring for your Fly applications.
package main import ( "context" "fmt" "time" schedo "github.com/useschedo/golang" "github.com/useschedo/golang/option" ) func main() { client := schedo.NewClient(option.WithAPIKey("key")) // Define a new job client.DefineJob( "example_job", "0 9 * * *", // Run every day at 9 AM func(ctx *schedo.JobExecutionContext) (string, error) { err := processData() if err != nil { return "", err } return "Job completed successfully", nil }, ) client.Start() }
Running scheduled tasks on Fly.io's global edge network requires careful coordination to prevent duplicates and ensure reliability across regions.
Every feature optimized for Fly.io's distributed architecture and global reach
No need for separate Fly apps or Redis instances. Single execution guarantee across all regions without additional infrastructure.
Replace your custom coordination setups with a simple SDK integration. No additional Fly apps or databases required.
Jobs run within your existing Fly app context, not in separate containers. Access your databases and services directly.
Perfect for triggering sleeping Fly machines or stateless apps. Schedule HTTP calls to any endpoint globally.
Automatic retries, error handling, and comprehensive monitoring. No need to build your own coordination logic.
Real-time execution logs, performance metrics, and failure alerts. Track job performance across all regions.
Works seamlessly with any Fly.io deployment - from full-stack apps to microservices
import { SchedoSDK, ExecutionInterval, withApiKey, } from "@useschedo/node"; const schedo = new SchedoSDK( withApiKey(process.env.SCHEDO_API_KEY) ); await schedo.defineJob( "cleanup_task", ExecutionInterval.Hourly, async (ctx) => { await cleanupFiles(); return { success: true }; } ); schedo.start();
package main import ( "context" "fmt" "time" schedo "github.com/useschedo/golang" "github.com/useschedo/golang/option" ) func main() { client := schedo.NewClient(option.WithAPIKey("key")) // Define a new job client.DefineJob( "example_job", "0 9 * * *", // Run every day at 9 AM func(ctx *schedo.JobExecutionContext) (string, error) { err := processData() if err != nil { return "", err } return "Job completed successfully", nil }, ) client.Start() }
Everything you need to know about running cron jobs on Fly.io with Schedo.dev
Still have questions?
Contact our support teamJoin hundreds of developers running reliable scheduled tasks across Fly.io's global edge network. Start coordinating your jobs worldwide in minutes.