How to execute python script on schedule?

谁说我不能喝 提交于 2020-07-04 05:35:22

问题


I have two Python scripts on my machine that I want to execute two times a day on specific time period. How do I automate this task? Since I will be away from home and thus my computer for a while, I want to upload them to a site and be executed from there automatic without me doing anything.

How can I do this?


回答1:


You can use cron for this if you are on a Linux machine. Cron is a system daemon used to execute specific tasks at specific times.

cron works on the principle of crontab, a text file with a list of commands to be run at specified times. It follows a specific format, which can is explained in detail in man 5 crontab

Format for crontab

Each of the sections is separated by a space, with the final section having one or more spaces in it. No spaces are allowed within Sections 1-5, only between them. Sections 1-5 are used to indicate when and how often you want the task to be executed. This is how a cron job is laid out:

minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday), command

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

The above example will run /usr/bin/somedirectory/somecommand at 4:01am on January 1st plus every Monday in January. An asterisk (*) can be used so that every instance (every hour, every weekday, every month, etc.) of a time period is used. Code:

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

The above example will run /usr/bin/somedirectory/somecommand at 4:01am on every day of every month.

Comma-separated values can be used to run more than one instance of a particular command within a time period. Dash-separated values can be used to run a command continuously. Code:

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

The above example will run /usr/bin/somedirectory/somecommand at 01 and 31 past the hours of 4:00am and 5:00am on the 1st through the 15th of every January and June.

The "/usr/bin/somedirectory/somecommand" text in the above examples indicates the task which will be run at the specified times. It is recommended that you use the full path to the desired commands as shown in the above examples. Enter which somecommand in the terminal to find the full path to somecommand. The crontab will begin running as soon as it is properly edited and saved.

You may want to run a script some number of times per time unit. For example if you want to run it every 10 minutes use the following crontab entry (runs on minutes divisible by 10: 0, 10, 20, 30, etc.)

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

which is also equivalent to the more cumbersome

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




回答2:


In Windows I have come up with two solutions.

First option: Create a .bat file.

Step 1

Create a .bat file to indicate the command you want to run and the script file that will be executed, for instance:

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

Step 2

Open the Task Scheduler and click on the Task Scheduler Library to see the current tasks that are executed. Click on the Create Task option.

Step 3

In the General tab, put the name of your new task and click on the option Run whether user is logged on or not, check the option Run with highest privileges and make sure to setup the appropriate version of you OS (in my case I picked Windows 7, Windows Server 2008 R2.

Step 4

In the Actions tab, click on the New button and type in the following:

In Program/Scripts you need to look up for the Powershell path that the Task Scheduler will invoke to run the .bat file. In my case, my Powershell path was: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

In Add arguments (optional) you need to type the path of the file that will be executed by Powershell. In my case, the path was:

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

In Start in (optional) you need to type the path of the file but without the name of the .bat file, that is:

C:\Users\userX\Desktop\

Step 5

Click on the Triggers tab and select how often you want to execute this task.

Step 6

Lastly, test your task to see if it truly works by selecting it from the Task Scheduler Library and doing click on the Run option.

Second option: Run the .py file with the Task Scheduler

Step 1

Open the Task Scheduler and click on the Task Scheduler Library to see the current tasks that are executed. Click on the Create Task option.

Step 2

In the General tab, put the name of your new task and click on the option Run whether user is logged on or not, check the option Run with highest privileges and make sure to setup the appropriate version of you OS (in my case I picked Windows 7, Windows Server 2008 R2.

Step 3

In the Actions tab, click on the New button and type in the following:

In Program/Scripts you need to look up for the Python.exe path that the Task Scheduler will invoke to run the python script. In my case, my Python.exe path was: C:\Users\userX\python.exe

In Add arguments (optional) you need to only type the name of your python script. In my case, the path was:

Permissions_dump.py

In Start in (optional) you need to type the path of the file but without the name of the python script, that is:

C:\Users\userX\PycharmProjects\1099_vendors_costs

Step 4

Click on the Triggers tab and select how often you want to execute this task.

Step 5

Lastly, test your task to see if it truly works by selecting it from the Task Scheduler Library and doing click on the Run option.

Another option (in case you convert a .py to a .exe)

If you use the library Cx_Freeze to convert a .py to a .exe and you want to use the task scheduler to automate this task then you need to follow these steps:

Step 1

Click on Create Task and then click on the Actions tab to type in the following:

In Program/Scripts you need to look up for the C:\Windows\explorer.exe path that the Task Scheduler will invoke to run the .exe script.

In Add arguments (optional) you need to only type the name of your .exe file: CustomerPopulation.exe

In Start in (optional) you need to type the path of the file but without the name of the .exe file, that is:

C:\Users\userX\PycharmProjects\executables

In the General tab, make sure to have selected the Run only when user is logged on and have unchecked the Run with the highest privileges.

References:

  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



回答3:


If you are using OSX then 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.



来源:https://stackoverflow.com/questions/30835547/how-to-execute-python-script-on-schedule

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!