That does not require setting the server to local time. Run the cron job every hour. Before starting the script, check the time and compare it to the last saved execution time. If the day has changed, do stuff and save the new date, else exit. This also happens to be more resilient to server downtime around midnight.

> Before starting the script, check the time and compare it to the last saved execution time. If the day has changed, do stuff and save the new date, else exit.

That sounds a bit like reimplementing a scheduler inside the scheduled task (which is ok if you don't trust your scheduler, but I'd avoid it if at all possible).

Except downtime can start during execution. So for many types of jobs...

- Check if run today, exiting on "yes"

- Run

- Update the last-run-on date

What is "today"?

Hopefully just a datetime recent enough that the job does not currently need to be (re-)run.

But as soon as one job needs another to complete first, or two jobs shouldn't be run at the same time - things start getting messy.

> Hopefully just a datetime recent enough that the job does not currently need to be (re-)run.

I can think of several ways to mess that seemingly trivial calculation up just from the top of my head. (Consider changing timezones, increasing the interval the job is running to within half a day of scheduling period etc.)