Script de Python para hacer algo a la misma hora todos los días

Tengo un script de Python de larga duración que quiero hacer algo a la 01:00 todas las mañanas.

He estado buscando en el módulo de progtwigción y en el objeto Timer, pero no puedo ver cómo usarlos para lograrlo.

Puedes hacerlo así:

 from datetime import datetime from threading import Timer x=datetime.today() y=x.replace(day=x.day+1, hour=1, minute=0, second=0, microsecond=0) delta_t=yx secs=delta_t.seconds+1 def hello_world(): print "hello world" #... t = Timer(secs, hello_world) t.start() 

Esto ejecutará una función (por ejemplo, hello_world) en el día siguiente a la 1a.m.

También dediqué bastante tiempo a lanzar un progtwig Python simple a la 01:00. Por alguna razón, no pude hacer que cron lo lanzara y APScheduler parecía bastante complejo para algo que debería ser simple. El horario ( https://pypi.python.org/pypi/schedule ) parecía correcto.

Tendrás que instalar su biblioteca de Python:

 pip install schedule 

Esto se modifica de su progtwig de muestra:

 import schedule import time def job(t): print "I'm working...", t return schedule.every().day.at("01:00").do(job,'It is 01:00') while True: schedule.run_pending() time.sleep(60) # wait one minute 

Necesitará poner su propia función en lugar de trabajo y ejecutarlo con nohup, por ejemplo:

 nohup python2.7 MyScheduledProgram.py & 

No te olvides de comenzar de nuevo si reinicias.

APScheduler puede ser lo que buscas.

 from datetime import date from apscheduler.scheduler import Scheduler # Start the scheduler sched = Scheduler() sched.start() # Define the function that is to be executed def my_job(text): print text # The job will be executed on November 6th, 2009 exec_date = date(2009, 11, 6) # Store the job in a variable in case we want to cancel it job = sched.add_date_job(my_job, exec_date, ['text']) # The job will be executed on November 6th, 2009 at 16:30:05 job = sched.add_date_job(my_job, datetime(2009, 11, 6, 16, 30, 5), ['text']) 

https://apscheduler.readthedocs.io/en/latest/

Puede hacerlo para progtwigr otra ejecución incorporándola a la función que está progtwigndo.

Necesitaba algo similar para una tarea. Este es el código que escribí: calcula el día siguiente y cambia la hora a lo que sea necesario y encuentra los segundos entre la hora actual y la siguiente hora progtwigda.

 import datetime as dt def my_job(): print "hello world" nextDay = dt.datetime.now() + dt.timedelta(days=1) dateString = nextDay.strftime('%d-%m-%Y') + " 01-00-00" newDate = nextDay.strptime(dateString,'%d-%m-%Y %H-%M-%S') delay = (newDate - dt.datetime.now()).total_seconds() Timer(delay,my_job,()).start()