I need to write a python script that autostarts on boot and is executed every 5 minutes on a raspberry pi. How can this be done? in particular, how can I avoid having a script locking up the cpu running a infine loop waiting for the 5 minutes to be over?
-
Use cron, but gevent will also be able to do the task nicely or sleep – Paul Feb 08 '14 at 16:21
4 Answers
You can easily use cron for this task (schedule to run Python script). ;)
How to setup cron
I suppose that you have cron installed already; if not, then install some (vixie-cron for an example).
Create a new file /etc/cron.d/<any-name>.cron
with the following content:
# run script every 5 minutes
*/5 * * * * myuser python /path/to/script.py
# run script after system (re)boot
@reboot myuser python /path/to/script.py
where myuser
is the user to run the script (it shouldn’t be root if possible, for security reasons). If this doesn’t work, then try to append the content to /etc/crontab
instead.
You might want to redirect stdout/stderr of the script to file, so you can check if everything works fine. This is same as in shell, just add something like >>/var/log/<any-name>-info.log 2>>/var/log/<any-name>-error.log
after the script path.

- 10,269
- 4
- 42
- 35
-
-
It depends on OS you have on your Raspberry, it’s irrelevant that it’s a Raspberry, not PC. However it’s basically the same on all Linux distros. I’ve updated my answer, hope it helps. – Jakub Jirutka Feb 08 '14 at 18:35
-
Ah, Raspbian is actually a distro, not some short for Raspberry Pi. :) – Jakub Jirutka Feb 08 '14 at 18:44
-
thanks! root is disabled anyway on raspbian.. :) what if i need to make a reboot through my script? it wont work with a different user.. – user2452250 Feb 09 '14 at 12:58
-
-
great thanks! do i need to "start" the cron somehow? i created the file but its not doing anything.. also, i did not understand your sentence about /etc/crontab – user2452250 Feb 09 '14 at 13:16
-
Of course, cron is a daemon, you should add it to runlevel to be started automatically after boot. – Jakub Jirutka Feb 09 '14 at 13:19
-
ive been googeling till now but cant seem to find how to add the daemon to autostart.. cant even find the name of the daemon... – user2452250 Feb 09 '14 at 14:29
Use schedule
- wrap the scrip in a function
import schedule
import time
def func():
print("this is python")
schedule.every(5).minutes.do(func)
while True:
schedule.run_pending()
time.sleep(1)

- 677
- 1
- 9
- 16
You can use time.sleep
count = -1
while(not abort):
count = (count+1) % 100
if count == 0:
print('hello world!')
time.sleep(3)

- 169
- 4
I am considering your code takes less than 5 minutes, but the execution time for each run is not constant.
import time
while True:
t= time.time()
# your code goes here
................
........
t= time.time()-t
time.sleep(300-t)

- 97
- 1
- 3