Standard Library
Job Scheduling (cron)

Cron Module

The cron module provides job scheduling with cron-style expressions.

funcs

cron.schedule()

Schedule a periodic task:

func daily_task() {
    print("This runs daily at 2 AM");
}
 
cron.schedule("0 2 * * *", daily_task);

Cron Expression Format

minute hour day month weekday
  • minute: 0-59
  • hour: 0-23
  • day: 1-31
  • month: 1-12
  • weekday: 0-6 (0 = Sunday)

Use * for any value.

Examples

Common Schedules

// Every day at midnight
cron.schedule("0 0 * * *", func() {
    print("Daily midnight task");
});
 
// Every hour
cron.schedule("0 * * * *", func() {
    print("Hourly task");
});
 
// Every 15 minutes
cron.schedule("*/15 * * * *", func() {
    print("Every 15 minutes");
});
 
// Weekdays at 9 AM
cron.schedule("0 9 * * 1-5", func() {
    print("Weekday morning task");
});
 
// Every Monday at 8 AM
cron.schedule("0 8 * * 1", func() {
    print("Monday morning task");
});

Database Backup

func backup_database() {
    log.info("Starting database backup");
    
    let db = sqlite.open("app.db");
    let all_data = sqlite.query(db, "SELECT * FROM users");
    
    let backup_json = json.stringify(all_data);
    fs.writeFile("backup_" + "2024-12-12" + ".json", backup_json);
    
    sqlite.close(db);
    log.info("Backup completed");
}
 
// Run backup every day at 3 AM
cron.schedule("0 3 * * *", backup_database);

Send Daily Report

func send_daily_report() {
    let db = sqlite.open("app.db");
    let user_count = sqlite.query(db, "SELECT COUNT(*) as count FROM users");
    sqlite.close(db);
    
    let report = "Daily Report\n" +
                 "Total users: " + tostring(user_count[0]["count"]) + "\n";
    
    mail.send(env.ADMIN_EMAIL, "Subject: Daily Report", report);
    log.info("Daily report sent");
}
 
// Send report every day at 11 PM
cron.schedule("0 23 * * *", send_daily_report);

Cleanup Old Data

func cleanup_old_sessions() {
   let db = sqlite.open("app.db");
   sqlite.exec(db, "DELETE FROM sessions WHERE created_at < date('now', '-7 days')");
    sqlite.close(db);
    log.info("Old sessions cleaned up");
}
 
// Run cleanup every Sunday at 2 AM
cron.schedule("0 2 * * 0", cleanup_old_sessions);

Best Practices

  • Keep scheduled tasks short and efficient
  • Log task execution for debugging
  • Handle errors gracefully
  • Avoid scheduling too many tasks
  • Consider timezone implications
  • Test schedules thoroughly

Next Steps