Cronjobs in the backend can be added in the function start_cronjobs in the main.rs file.
This should be done by spawning a new tokio thread via tokio::spawn(cronjob_function());.
The function itself should never return.
This can be done by using the following function signature fn cronjob_function() -> ! and using a loop inside the function itself.
Example database cronjob:
#![allow(unused)]fnmain() {
pubasyncfncleanup(pool: Pool) -> ! {
loop {
tokio::time::sleep(Duration::from_secs(60)).await;
let query = diesel::delete(<some_constraint>);
debug!("{}", debug_query::<Pg, _>(&query));
match pool.get().await {
Ok(mut conn) => match query.execute(&mut conn).await {
Ok(delete_rows) => log::info!("Removed {delete_rows} entries"),
Err(e) => log::error!("Failed to execute query: {}", e),
},
Err(e) => {
log::error!("Failed to get connection from pool: {}", e);
}
}
}
}
}