Pergunta

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?

Foi útil?

Solução

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.

Outras dicas

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)

You can use time.sleep

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

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top