如何按时执行脚本?

How to execute script on schedule?

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

我该怎么做?

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

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

中详细解释

crontab 的格式

每个部分都由 space 分隔,最后一个部分包含一个或多个 space。在第 1-5 节中不允许使用 space,只能在它们之间使用。第 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 日加上 1 月的每个星期一 运行 /usr/bin/somedirectory/somecommand 4:01am。可以使用星号 (*) 以便使用时间段的每个实例(每小时、每个工作日、每月等)。代码:

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

以上示例将在每个月的每一天 运行 /usr/bin/somedirectory/somecommand 4:01am。

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

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

以上示例将在每年一月和六月的 4:00am 和 5:00am 的 01 点和 31 点 运行 /usr/bin/somedirectory/somecommand

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

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

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

也相当于比较繁琐

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

如果您使用 OSX,则 launchd is the preferred way to schedule tasks. There is a OSX CLI for launchd called launchctl but if you prefer a GUI my preferred one is launchcontrol

在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 并确保设置合适的版本 OS(在我的例子中,我选择了 Windows 7, Windows Server 2008 R2.

步骤 4

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

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

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

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

开始(可选)你需要输入文件的路径但没有.bat文件的名称,即:

C:\Users\userX\Desktop\

步骤 5

单击“触发器”选项卡,然后select您希望多久执行一次此任务。

步骤 6

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

第二个选项:运行带有任务计划程序的 .py 文件

步骤 1

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

步骤 2

在常规选项卡中,输入新任务的名称并单击选项 Run whether user is logged on or not,选中选项 Run with highest privileges 并确保设置合适的版本 OS(在我的例子中,我选择了 Windows 7, Windows Server 2008 R2.

步骤 3

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

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

添加参数(可选)中,您只需要键入您的python脚本的名称。在我的例子中,路径是:

Permissions_dump.py

开始(可选)你需要输入文件的路径但没有python脚本的名称,即:

C:\Users\userX\PycharmProjects99_vendors_costs

步骤 4

单击“触发器”选项卡,然后select您希望多久执行一次此任务。

步骤 5

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

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

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

步骤 1

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

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

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

开始于(可选)你需要输入文件的路径但没有.exe文件的名称,即:

C:\Users\userX\PycharmProjects\executables

在“常规”选项卡中,确保 select 编辑了 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