如何安排脚本定期运行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何安排脚本定期运行?相关的知识,希望对你有一定的参考价值。

我有一个编写Python脚本的任务,该脚本必须每周解析一次网页。我编写了脚本,但不知道如何使它每周工作一次。有人可以分享建议并写可能的解决方案吗?

答案

看看cron。它不是python,但在我看来更适合这项工作。例如:

@weekly python path/to/your/script

here讨论了类似的问题。

另一答案

脚本本身是否应定期重复执行任务通常取决于任务应重复执行的频率。通常最好每周安排一次计划工具,例如cronat

但是,脚本内部的一种简单方法是将您的主要逻辑包装在一个循环中,该循环一直休眠直到下一个所需的开始时间,然后让脚本连续运行。 (请注意,脚本无法可靠地自行重启,或显示如何进行重启超出了此问题的范围。建议使用外部解决方案。)

代替

def main():
    ...


if __name__ == '__main__':
    main()

使用

import tim


one_week = 7 * 24 * 3600  # Seconds in a week

def main():
    ...


if __name__ == '__main__':
    while True:
        start = time.time()
        main()
        stop = time.time()
        elapsed = stop - start
        time.sleep(one_week - elapsed)
另一答案

您是否打算在本地运行它?您正在使用虚拟环境吗?

任务计划程序选项

如果在本地运行,则可以从Windows使用Task Scheduler。我发现设置任务可能有些棘手,因此这里是一个概述:

  1. 打开任务计划程序> 创建任务(在右侧操作菜单上)
  2. 在选项卡“ 常规”中为任务命名
  3. 在选项卡“ 触发器”中定义触发器(即,要计划任务的时间)
  4. 在选项卡“ 操作”中,按新建>启动程序。在“程序/脚本”下,指向python可执行文件(python.exe)的位置(完整路径)。如果您正在使用虚拟环境,则通常在venv\Scripts\python.exe中。完整路径为C:\your_workspace_folder\venv\Scripts\python.exe。否则,很可能在您的程序文件中。
  5. 在同一选项卡的添加参数下,输入python脚本的完整路径。例如:"C:\your_workspace_folder\main.py"(请注意,您需要使用“”)。
  6. 按确定并保存任务。

调试

要测试您的计划是否可行,您可以右键单击“任务计划程序”中的任务,然后按“运行”。但是,那么您将看不到正在发生的事情的日志。因此,我建议打开一个终端(例如cmd)并输入以下内容:

C:\your_workspace_folder\venv\Scripts\python.exe "C:\your_workspace_folder\main.py"

这可让您查看代码的完整跟踪以及代码是否正常运行。发生的典型错误与文件路径有关(例如,如果您不使用完整路径而是相对路径)。

睡眠模式

由于您没有管理员权限并且计算机进入睡眠模式,因此某些任务可能无法运行。我找到的一种解决方法是,使用.vbs脚本防止计算机进入睡眠模式。只需打开记事本并创建一个名为idle.vbs的新文件(扩展名应为.vbs,因此请确保选择所有程序)。在其中粘贴以下代码:

Dim objResult

Set objShell = WScript.CreateObject("WScript.Shell")    

Do While True
  objResult = objShell.sendkeys("NUMLOCKNUMLOCK")
  Wscript.Sleep (60000)
Loop

以上是关于如何安排脚本定期运行?的主要内容,如果未能解决你的问题,请参考以下文章

安排 Django Celery 定期任务从某个时间运行到另一个时间

计划在定期时间运行方法

linux进程管理-定时定期执行任务

如何处理取消的定期付款

从 VoltDB 定期运行 VoltDB 存储过程

如何在servlet中获取后台运行脚本的输出