Hello
I have a Actix-web project. Let's for the sake of ease say it's just a simple website where people can register. I save the timestamp of when someone registers.
What I want to have now is a code which automatically e-mails people who are exactly one year registered. To do this I'd need a code which gets executed once a day.
A cronjob seems perfect for this job. First I was thinking about making a cronjob in Bash and to let it call a function in my Actix project by sending a HTTP-request to trigger it.
But it seems Rust also has some kind of solution for this: the cronjob Crate.
This is my code:
//...
extern crate cronjob;
use cronjob::CronJob;
#[actix_web::main]
async fn main() -> std::io::Result<()> {
// Cronjob
let mut cron = CronJob::new("Test", send_mails);
cron.seconds("20"); // Executed every minute in this example
cron.offset(0);
CronJob::start_job_threaded(cron); // Threaded
// start http server
HttpServer::new(move || {
// Code and services for Actix-web
//...
})
.bind("127.0.0.1:8080")?
.run()
.await
}
pub fn send_mails(name: &str) {
println!("Sending mails!");
}
This code seems to work. But I have a few questions regarding the combination of such a cronjob and Actix together.
- Actix-web creates a new instance for each visitor (otherwise only one visitor at a time would be possible). Does this mean that if 5 people visit my site, the function
send_mails
would be executed 5 times as well? I don't think this is the case because theHttpServer
is 'shielded' from the other code. But I just want to double-check this. - My
send_mails
function is notasync
like the most part of my code. But I guess this isn't a problem because it's not a problem if the separate cronjob-thread needs to wait for the response. - How would I use a
async
function in this Cronjob-crate? - Is this a good approach?
- Other things I should consider?
Thanks!