Как выполнить 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
.
Рекомендации:
- https://gis.stackexchange.com/questions/140110/running-python-script-in-task-scheduler-script-will-not-run?newreg=603bcdbc381b41a283e5d8d0561b835e
- https://www.youtube.com/watch?v=oJ4nktysxnE
- https://www.youtube.com/watch?v=n2Cr_YRQk7o
Ответ 3
Если вы используете OSX, то launchd является предпочтительным способом планирования задач. Существует CLI OSX для запуска под названием launchctl, но если вы предпочитаете графический интерфейс, мой предпочтительный launchcontrol.