Как выполнить python script по расписанию?

У меня есть два Python scripts на моей машине, которые я хочу выполнять два раза в день в определенный период времени. Как автоматизировать эту задачу? Так как я буду вдали от дома и, следовательно, своего компьютера на некоторое время, я хочу загрузить их на сайт и выполнить оттуда автоматически без меня.

Как я могу это сделать?

Ответ 1

Вы можете использовать cron для этого, если вы работаете на машине с Linux. 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

Приведенный выше пример будет запускать /usr/bin/somedirectory/somecommand в 4:01 утра 1 января плюс каждый понедельник января. Звездочку (*) можно использовать так, чтобы использовался каждый экземпляр (каждый час, каждый будний день, каждый месяц и т.д.) Периода времени. Код:

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

Приведенный выше пример будет запускать /usr/bin/somedirectory/somecommand в 4:01 утра каждый день каждого месяца.

Значения, разделенные запятыми, могут использоваться для запуска более одного экземпляра конкретной команды в течение определенного периода времени. Значения, разделенные дефисом, могут использоваться для непрерывного выполнения команды. Код:

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

Вышеприведенный пример будет запускать /usr/bin/somedirectory/somecommand в 01 и 31 часа после 4:00 и 5:00 утра с 1 по 15 января и июня.

Текст "/usr/bin/somedirectory/somecommand" в вышеприведенных примерах указывает на задачу, которая будет выполняться в указанное время. Рекомендуется использовать полный путь к нужным командам, как показано в приведенных выше примерах. Введите which somecommand в терминале, чтобы найти полный путь к команде. Crontab начнет работать, как только он будет правильно отредактирован и сохранен.

Вы можете запускать скрипт несколько раз за единицу времени. Например, если вы хотите запускать его каждые 10 минут, используйте следующую запись crontab (запускается в минутах, кратных 10: 0, 10, 20, 30 и т.д.)

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

что также эквивалентно более громоздким

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

Ответ 2

В Windows у меня есть два решения.

Первый вариант: создать файл .bat.

Шаг 1

Создайте файл .bat, чтобы указать команду, которую вы хотите выполнить, и файл сценария, который будет выполняться, например:

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

Шаг 2

Откройте планировщик задач и щелкните библиотеку планировщика задач, чтобы увидеть текущие задачи, которые выполняются. Нажмите на опцию Создать задачу.

Main window Task Scheduler

Шаг 3

На вкладке "Общие" введите название своей новой задачи и нажмите на опцию Run whether user is logged on or not, отметьте опцию Run with highest privileges и убедитесь, что вы установили соответствующую версию вашей ОС (в моем случае я выбрал Windows 7, Windows Server 2008 R2.

High privileges

Шаг 4

На вкладке "Действия" нажмите кнопку "Создать" и введите следующее:

В Program/Scripts вам нужно найти путь к Powershell, который планировщик задач будет вызывать для запуска файла .bat. В моем случае мой путь к Powershell был: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

В Добавить аргументы (необязательно) вам нужно ввести путь к файлу, который будет выполняться Powershell. В моем случае путь был:

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

В Начать с (необязательно) вам нужно ввести путь к файлу, но без имени .bat файла, то есть:

C:\Users\userX\Desktop\

Configure the settings for Powershell

Шаг 5

Нажмите на вкладку "Триггеры" и выберите, как часто вы хотите выполнять эту задачу.

Frequency of the task to be executed

Шаг 6

Наконец, проверьте свою задачу, чтобы увидеть, действительно ли она работает, выбрав ее из библиотеки планировщика задач и нажав кнопку "Выполнить".

Test your task

Второй вариант: запустить .py файл с помощью планировщика заданий

Шаг 1

Откройте планировщик задач и щелкните библиотеку планировщика задач, чтобы увидеть текущие задачи, которые выполняются. Нажмите на опцию Создать задачу.

Main window Task Scheduler

Шаг 2

На вкладке "Общие" введите название своей новой задачи и нажмите на опцию Run whether user is logged on or not, отметьте опцию Run with highest privileges и убедитесь, что вы установили соответствующую версию вашей ОС (в моем случае я выбрал Windows 7, Windows Server 2008 R2.

High privileges

Шаг 3

На вкладке "Действия" нажмите кнопку "Создать" и введите следующее:

В Program/Scripts вам нужно найти путь Python.exe, который планировщик задач будет вызывать для запуска сценария python. В моем случае мой путь Python.exe был: C:\Users\userX\python.exe

В Добавить аргументы (необязательно) вам нужно только ввести имя своего скрипта Python. В моем случае путь был:

Permissions_dump.py

В Начать с (необязательно) вам нужно ввести путь к файлу, но без имени сценария python, то есть:

C:\Users\userX\PycharmProjects\1099_vendors_costs

Python configuration

Шаг 4

Нажмите на вкладку "Триггеры" и выберите, как часто вы хотите выполнять эту задачу.

Frequency of the task to be executed

Шаг 5

Наконец, проверьте свою задачу, чтобы увидеть, действительно ли она работает, выбрав ее из библиотеки планировщика задач и нажав кнопку "Выполнить".

Test your task

Другой вариант (если вы конвертируете .py в .exe)

Если вы используете библиотеку Cx_Freeze для преобразования .py в .exe и хотите использовать планировщик задач для автоматизации этой задачи, вам необходимо выполнить следующие действия:

Шаг 1

Нажмите "Создать задачу", а затем перейдите на вкладку "Действия" и введите следующее:

В Program/Scripts вам нужно найти путь C:\Windows\explorer.exe, который планировщик задач будет вызывать для запуска сценария .exe.

В Добавить аргументы (необязательно) вам нужно только ввести имя вашего файла .exe: CustomerPopulation.exe

В Начать с (необязательно) необходимо ввести путь к файлу, но без имени .exe файла, а именно:

C:\Users\userX\PycharmProjects\executables

exe parameters

На вкладке Общие убедитесь, что вы выбрали 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

Ответ 3

Если вы используете OSX, то launchd является предпочтительным способом планирования задач. Существует CLI OSX для запуска под названием launchctl, но если вы предпочитаете графический интерфейс, мой предпочтительный launchcontrol.