![](/img/trans.png)
[英]How can I Schedule python script to run every day at specific time ? (except Windows schedule)
[英]Python: How to automate script to run every day at specific time?
目前,我有一个 python 脚本,它只有在到达指定的日期/时间后才会启动,除非我重新指定日期/时间,否则永远不会再次运行:
import datetime, time
start_time = datetime.datetime(2017, 4, 27, 19, 0, 0)
while(True):
dtn = datetime.datetime.now()
if dtn >= start_time:
# Runs the main code once it hits the start_time
但是我怎样才能让它每天只在指定的时间运行代码呢?
预先感谢您,并一定会赞成/接受答案
cronjob
是这项工作的正确工具。
要在每天 12:00 执行的mac
上创建job
,请打开终端并键入:
env EDITOR=nano crontab -e
0 12 * * * /full/path/to/python /full/path/to/script.py
CTRL+O和CTRL+X保存并退出。
笔记:
1 - job
按以下格式指定:
2 - 要查看活动crontab
作业的列表,请使用以下命令:
crontab -l
提示:
在工作日凌晨 1 点执行:
0 1 * * 1-5 /full/path/to/python /full/path/to/script.py
每 10 分钟执行一次:
*/10 * * * * /full/path/to/python /full/path/to/script.py
日志输出到文件:
*/10 * * * * /full/path/to/python /full/path/to/script.py >> /var/log/script_output.log 2>&1
笔记:
一旦您确定当前时间已超过开始时间,请使用datetime.timedelta
对象将开始时间增加所需的间隔。
import datetime
import time
next_start = datetime.datetime(2017, 4, 27, 19, 0, 0)
while True:
dtn = datetime.datetime.now()
if dtn >= next_start:
next_start += datetime.timedelta(1) # 1 day
# do what needs to be done
time.sleep(AN_APPROPRIATE_TIME)
使用 Python 模块 apscheduler 可能是一种选择。
from datetime import datetime
import time
import os
from apscheduler.schedulers.background import BackgroundScheduler
def tick():
print('Tick! The time is: %s' % datetime.now())
if __name__ == '__main__':
scheduler = BackgroundScheduler()
scheduler.add_job(tick, 'interval', seconds=3)
scheduler.start()
print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
try:
# This is here to simulate application activity (which keeps the main thread alive).
while True:
time.sleep(2)
except (KeyboardInterrupt, SystemExit):
# Not strictly necessary if daemonic mode is enabled but should be done if possible
scheduler.shutdown()
使用 python 你可以尝试
在这两种情况下,python 解释器都必须运行,并且在等待合适的时间时可能会做其他事情。
或者按照评论中的建议,您可以使用在您的操作系统上运行的其他服务来安排您的 python 脚本执行。
为什么不是 cronjob (linux) 或 Task Scheduler (windows)? — 佩德罗·洛比托
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.