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
- Logging Module - Log task execution
- Examples - Automated workflows