Noah Evans
Noah Evans

Reputation: 349

Run Python At Specific Time

I am working on a Python program. It needs to run every 15 minutes. It currently waits 870 seconds (14.5 mins) before running again, but as the time it takes to complete the action varies, sometimes it runs before it has been 15 minutes since it last run, sometimes after 15 minutes.

My code for this part currently looks like this:

print(colour.BOLD, colour.PURPLE, "Finished", colour.END)
    print(colour.BOLD, colour.BLUE, 'WAITING 15 MINUTES (900 SECONDS)', colour.END)
    time.sleep(870)

Is there a way I can get it to run at xx:15, xx:30, xx:45, xx:00 where xx is every hour from 00 to 23?

Sorry if I'm being confusing here. Thanks for any help in advance.

Upvotes: 0

Views: 7697

Answers (3)

Pitto
Pitto

Reputation: 8579

Use your OS tools to achieve similar results.

They are very reliable and, in case of your script failure, it will run anyway next time.

Linux
Use crontab.
How to set it will slightly change depending on your Distribution.

As a general idea:

sudo crontab -e

Inside the crontab write (be sure to customize the python executable and script path):

*/15 * * * * /usr/bin/python /path/to/your/script.py

This will make sure that your script is executed every 15 minutes.

Windows
How to schedule a task on Windows is more dependent on the Windows version you are using and it is a very visual task. Googling "How to schedule a task in Windows" will return way better / more specific / updated results than the one I could clumsily explain here.

Here's a nice one I have found for you.

Mac
Read the amazing answer by Meki here on StackOverflow.

Upvotes: 1

HelpfulHound
HelpfulHound

Reputation: 326

Having a script that does a thing at discrete intervals taking control of its own destiny like that makes me squirrely. I would use an external scheduling framework to run this job at discrete intervals. In Linux, this can be done with cronjobs; in Windows, it can be done with Task Scheduler.

Linux: In terminal, type

crontab -e

to edit the cron schedule for the current user context. Docs on editing cron can be found all over the internet - here's one: https://www.raspberrypi.org/documentation/linux/usage/cron.md

Windows: You can schedule a python script to run on that schedule in Windows Task Scheduler. here's a link walking through that: https://www.esri.com/arcgis-blog/products/product/analytics/scheduling-a-python-script-or-model-to-run-at-a-prescribed-time/

be certain to utilize the "if the task is already running" and "run task as soon as possible after a scheduled start is missed" options if you do this method to control appropriate behavior: enter image description here

Upvotes: 0

Mason Caiby
Mason Caiby

Reputation: 1924

I would use the schedule module: https://pypi.org/project/schedule/

you would run:

schedule.every().minute.at(":00").do(job)
schedule.every().minute.at(":15").do(job)
schedule.every().minute.at(":30").do(job)
schedule.every().minute.at(":45").do(job)

Upvotes: 1

Related Questions