【问题标题】:How to execute script on schedule?如何按时执行脚本?
【发布时间】:2015-08-30 09:08:18
【问题描述】:

我的机器上有两个 Python 脚本,我想在特定时间段每天执行两次。如何自动执行此任务?由于我将离开家,因此我的电脑会离开一段时间,因此我想将它们上传到一个站点并从那里自动执行,而无需我做任何事情。

我该怎么做?

【问题讨论】:

  • 你运行的是什么操作系统?
  • 如果您使用的是 Linux 或 Mac 机器,cron 怎么样?
  • cron 用于 linux 或 mac,Windows 任务计划用于 Windows
  • Mac os,但我需要一些基于 Web 的解决方案,因为我的计算机不会 24/7 运行

标签: python automation


【解决方案1】:

如果您在 Linux 机器上,您可以使用 cron。 Cron 是一个系统守护进程,用于在特定时间执行特定任务。

cron 的工作原理是crontab,这是一个包含在指定时间运行的命令列表的文本文件。它遵循特定的格式,可以在man 5 crontab中详细解释

crontab 格式

每个部分由一个空格分隔,最后一个部分包含一个或多个空格。第 1-5 节中不允许有空格,只能在它们之间。第 1-5 节用于指示您希望何时以及多久执行一次任务。这是 cron 作业的布局方式:

分钟 (0-59)、小时 (0-23, 0 = 午夜)、日 (1-31)、月 (1-12)、工作日 (0-6, 0 = 星期日)、命令

01 04 1 1 1 /usr/bin/somedirectory/somecommand

上述示例将在 1 月 1 日凌晨 4:01 以及 1 月的每个星期一运行 /usr/bin/somedirectory/somecommand。可以使用星号 (*),以便使用时间段的每个实例(每小时、每个工作日、每个月等)。代码:

01 04 * * * /usr/bin/somedirectory/somecommand

上面的示例将在每个月的每天凌晨 4:01 运行 /usr/bin/somedirectory/somecommand。

逗号分隔的值可用于在一段时间内运行多个特定命令的实例。破折号分隔的值可用于连续运行命令。代码:

01,31 04,05 1-15 1,6 * /usr/bin/somedirectory/somecommand

上述示例将在每年 1 月和 6 月 1 日至 15 日凌晨 4:00 和 5:00 的凌晨 1 点和 31 点运行/usr/bin/somedirectory/somecommand

以上示例中的“/usr/bin/somedirectory/somecommand”文本表示将在指定时间运行的任务。建议您使用所需命令的完整路径,如上述示例所示。在终端中输入 which somecommand 以找到 somecommand 的完整路径。 crontab 将在正确编辑和保存后立即开始运行。

您可能希望每个时间单位运行脚本若干次。例如,如果您想每 10 分钟运行一次,请使用以下 crontab 条目(以可被 10 整除的分钟数运行:0、10、20、30 等)

*/10 * * * * /usr/bin/somedirectory/somecommand

也相当于比较麻烦

0,10,20,30,40,50 * * * * /usr/bin/somedirectory/somecommand

【讨论】:

  • 是否有某种基于 Web 的解决方案?由于我不会让我的电脑(笔记本电脑)在家中 24/7 全天候运行,因此我需要一项可以为我提供此解决方案的服务。
  • @Zip 我们提供的正是SeekWell。只需单击几下,您就可以从我们的Chrome Extension 安排使用 Python 的 Jupyter Notebooks。
  • 买一台便宜的PC,把它当做Linux服务器,可以按需运行这些脚本,持续运行。这样,您就不必付钱给其他人来运行您的东西。有很多人,包括我自己,都在使用 Raspberry Pi 来完成此类任务。
【解决方案2】:

在 Windows 中,我提出了两种解决方案。

第一个选项:创建一个 .bat 文件。

第 1 步

创建一个 .bat 文件以指示您要运行的命令和将执行的脚本文件,例如:

start C:\Users\userX\Python.exe C:\Users\userX\PycharmProjects\Automation_tasks\create_workbook.py

第 2 步

打开任务计划程序并单击任务计划程序库以查看当前执行的任务。单击“创建任务”选项。

第 3 步

在“常规”选项卡中,输入新任务的名称并单击选项 Run whether user is logged on or not,检查选项 Run with highest privileges 并确保设置您的操作系统的适当版本(在我的情况下,我选择了 Windows 7, Windows Server 2008 R2 .

第 4 步

在“操作”选项卡中,单击“新建”按钮并输入以下内容:

程序/脚本中,您需要查找任务计划程序将调用以运行 .bat 文件的 Powershell 路径。就我而言,我的 Powershell 路径是: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

添加参数(可选)中,您需要键入将由 Powershell 执行的文件的路径。就我而言,路径是:

C:\Users\userX\Desktop\run_the_bat_file.bat

Start in (optional)中需要输入文件的路径但不输入.bat文件的名称,即:

C:\Users\userX\Desktop\

第 5 步

单击“触发器”选项卡并选择您希望执行此任务的频率。

第 6 步

最后,通过从任务计划程序库中选择任务并单击“运行”选项来测试您的任务是否真正有效。

第二个选项:使用任务计划程序运行 .py 文件

第 1 步

打开任务计划程序并单击任务计划程序库以查看当前执行的任务。单击“创建任务”选项。

第 2 步

在“常规”选项卡中,输入新任务的名称并单击选项 Run whether user is logged on or not,选中选项 Run with highest privileges 并确保设置您的操作系统的适当版本(在我的情况下,我选择了 Windows 7, Windows Server 2008 R2 .

第 3 步

在“操作”选项卡中,单击“新建”按钮并输入以下内容:

程序/脚本中,您需要查找任务计划程序将调用以运行 python 脚本的 Python.exe 路径。就我而言,我的 Python.exe 路径是: C:\Users\userX\python.exe

添加参数(可选)中,您需要输入您的 python 脚本的名称。就我而言,路径是:

Permissions_dump.py

Start in (optional)中需要输入文件的路径但不输入python脚本的名称,即:

C:\Users\userX\PycharmProjects\1099_vendors_costs

第 4 步

单击“触发器”选项卡并选择您希望执行此任务的频率。

第 5 步

最后,通过从任务计划程序库中选择任务并单击“运行”选项来测试您的任务是否真正有效。

另一种选择(如果您将 .py 转换为 .exe)

如果您使用库 Cx_Freeze 将 .py 转换为 .exe 并希望使用任务调度程序自动执行此任务,则需要执行以下步骤:

第 1 步

点击创建任务,然后点击操作选项卡输入以下内容:

程序/脚本中,您需要查找任务计划程序将调用以运行 .exe 脚本的 C:\Windows\explorer.exe 路径。

添加参数(可选)中,您需要输入您的 .exe 文件的名称:CustomerPopulation.exe

Start in (optional)中需要输入文件的路径但不输入.exe文件的名称,即:

C:\Users\userX\PycharmProjects\executables

在“常规”选项卡中,确保已选择 Run only when user is logged on 并取消选中 Run with the highest privileges

如果报告停止工作 请务必检查您的密码是否未过期,否则将不会发送报告。

参考资料:

  1. https://gis.stackexchange.com/questions/140110/running-python-script-in-task-scheduler-script-will-not-run?newreg=603bcdbc381b41a283e5d8d0561b835e
  2. https://www.youtube.com/watch?v=oJ4nktysxnE
  3. https://www.youtube.com/watch?v=n2Cr_YRQk7o

【讨论】:

  • 请在答案中解释如何做到这一点。
  • @BaummitAugen 我已经添加了有关如何使用 Python 运行自动化任务的进一步说明。随意改进它们。
【解决方案3】:

如果您使用的是 OSX,那么launchd 是安排任务的首选方式。有一个用于 launchd 的 OSX CLI,名为 launchctl,但如果您更喜欢 GUI,我更喜欢的是 launchcontrol

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2019-06-27
    • 2015-06-10
    • 2017-12-04
    • 1970-01-01
    相关资源
    最近更新 更多