Cron linux python 3

Управление Cron-задачами на Python

В этой статье вы узнаете, почему так важно планирование задач с использованием cron. Также вы познакомитесь с python-crontab — модулем, написанным на языке Python, который позволяет взаимодействовать с crontab. Вы научитесь писать программы, которые управляют cron-задачами.

Что такое Cron?

Во время администрирования системы, часто бывает необходимо запускать фоновые задачи на сервере, чтобы выполнять какую-нибудь рутинную работу. Cron — это системный процесс, который используется для выполнения фоновых задач по заданному распорядку. Cron необходим файл, который называется crontab. Он содержит список задач, которые должны выполниться в фоновом режиме в определенное время.

Чтобы посмотреть задачи cron, запущенные в вашей системе, наберите в терминале:

Эта команда выводит список задач в файле crontab. Чтобы добавить новую задачу, введите:

Эта команда выведет файл crontab, где вы сможете добавить в расписание новую задачу. Допустим, у вас есть файл hello.py , который выглядит следующим образом:

Теперь, чтобы запланировать задачу на выполнение этого скрипта и записывать вывод в другой файл, добавьте следующую строку кода:

Этот код добавляет в расписание выполнение скрипта с выводом в файл a.txt . Цифры перед выполняемой командой задают время выполнения задачи. Синтаксис времени имеет 5 частей:

Звездочки (*) означают, что задача должна запускаться при любом значении этой еденицы времени.

Представляем Python-Crontab

Python-crontab — это модуль на языке Python, который предоставляет доступ к задачам cron и дает возможность управлять файлом crontab прямо из программы. Он автоматизирует процесс изменения файла crontab . Чтобы начать работу с python-crontab, вам нужно установить модуль используя pip:

После установки, вы можете импортировать его в свою программу:

Создание задачи cron

Давайте напишем нашу первую cron-задачу. Создайте программу на Python с именем writeData.py . Внутри writeData.py добавьте код, который будет записывать текущее время и дату в другой файл. Вот как будет выглядеть наш код:

Давайте теперь создадим другую программу, которая будет добавлять в расписание программу writeData.py , чтобы она запускалась каждую минуту. Создайте файл scheduleCron.py .

Импортируйте модуль в scheduleCron.py .

Используя модуль CronTab, подключитесь в системе crontab.

Эта команда создает подключение к системе crontab для конкретного пользователя. Давайте пробежимся в цикле по задачам cron, и вы сможете увидеть любую задачу, созданную вручную этим пользователем.

Сохраните изменения и попробуйте выполнить scheduleCron.py , и вы получите список задач, если такие есть, для конкретного пользователя. Вы сможете увидеть что-то такое при выполнении:

Давайте продолжим и создадим новую задачу cron используя модуль CronTab. Вы можете создать новую задачу используя метод new, указав команду, которая должна быть выполнена.

После того как вы создали новую задачу, вам нужно добавить ее в расписание.

Давайте добавим в расписание задачу, чтобы она запускалась каждую минуту. Таким образом, с интервалом в одну минуту в файл dateInfo.txt будет добавляться текущая дата и время. Чтобы запланировать задачу на выполнение каждую минуту, добавьте следующую строку кода:

Теперь, когда вы запланировали задачу, вам нужно записать ее в crontab.

Вот полное содержимое файла scheduleCron.py :

Сохраните изменения и запустите программу.

Когда она будет запущена, проверьте файл crontab, при помощи следующей команды:

Читайте также:  Windows forms mdi form

Эта команда должна вывести только что добавленную задачу.

Подождите минуту и проверьте вашу корневую директорую. Вы должны увидеть файл dateInfo.txt с текущей датой и временем. Этот файл будет обновляться каждую минуту, и новые данные будут добавляться в конец имеющегося содержимого.

Редактирование существующей задачи cron

Чтобы отредактировать существующую задачу, вам нужно найти её по команде или по Id. Вы можете добавить Id к задаче в виде комментария, когда её создаете. Вот как вы можете это сделать:

Как видно из этого кода, новая задача была создана с коментарием dateinfo . Этот коментарий может быть использован для поиска задачи.

Вам нужно пройти циклом все задачи в crontab и проверить присутствие коментария dateinfo. Вот код:

Проверяем коментарий каждой задачи используя свойство job.comment.

После того как вы нашли задачу, запланируйте её заново и запишите в cron. Вот окончательный код:

Сохраните изменения и запустите scheduleCron.py . Получите список элементов в файле crontab, используя следующую команду:

Вы должны увидеть задачу с отредактированным временем.

Удаление задач из crontab

Python-crontab предоставляет методы для очистки crontab или удаления отдельных задач. Вы можете удалить задачу из crontab по его расписанию, комментарию или команде.

К примеру, вы хотите удалить задачу с коментарием dateinfo . Код будет таким:

Также, чтобы удалить задачу с заданным коментарием, вы можете напрямую вызвать метод remove на my_cron безо всяких циклов. Вот код:

Чтобы удалить все задачи из crontab, вы можете вызвать метод remove_all .

Когда вы закончите с изменениями задач, запишите их обратно в cron, используя следующую команду:

Получение частоты выполнения задачи

Чтобы узнать при помощи python-crontab, как часто ваша задача запускается, вы можете использовать метод frequency . Получив задачу, вы можете вызвать этот метод, который вернет число выполнений этой задачи в течение года.

Чтобы получить количество вызовов в течение часа, вы можете использовать метод frequency_per_hour .

Аналогично, для получения частоты в день, вы можете использовать метод frequency_per_day .

Проверка расписания задачи

Python-crontab предоставляет функциональность для проверки расписания конкретной задачи. Чтобы это работало, вам нужно установить модуль croniter используя pip:

После этого вызовите метод schedule на задаче, чтобы получить ее расписание:

Теперь вы можете получить расписание следующей задачи используя метод get_next .

В итоге должен получиться вот такой код:

Для получения предыдущей задачи вы можете использовать метод get_prev .

Подведем итоги

В этой статье вы увидели, как пользоваться python-crontab для подключения к системному crontab из программы на языке Python. Используя python-crontab вы можете автоматизировать процесс создания, редактирования и планирования задач cron.

Пользовались ли вы этим или каким-нибудь другим модулем для работы с crontab? Пишите в комментариях, я буду рад услышать ваше мнение.

Источник

Как запустить скрипты python через cron на Linux

Описание процесса запуска скриптов python на сервере Linux.

Альтернативы cron на python — timer или периодические задачи (celery).

Подготовка сервера

Сервер должен быть сконфигурирован для работы с python. Повторю основное из статьи по ссылке.

На сервере должны быть установлены пакеты для python:

Установлен пакет python3-venv:

Положить файлы в требуемую директорию и создать там виртуальную среду:

Подготовка файла

В верху файла python добавить строку ведущую к виртуальному окружению python:

Сделать файл исполняемым:

Если нужны зависимости (модули) к файлу их можно отдельно установить через файл requirements.txt.

Добавление в cron

Открыть крон файл:

А если мы вошли в качестве другого пользователя, то создадим сначала ему кронтаб:

Если будет ошибка:

Будет предложено какой редактор использовать для просмотра кронов. Пропустите это сначала и посмотрите где находится nano (если конечно предпочтение отдается ему):

А затем указывая его путь установим редактор по умолчанию:

Читайте также:  Arch linux zram generator

Добавить наш скрипт:

/ project / app / python_script.py >

/ project / logs / python_script.log 2 >& 1

Строка состоит из: время запуска / скрипт запуска / лог запуска (если ошибок не будет, он будет пустым, если специально туда ничего не выводить).

Возможные ошибки

Не видится путь к модулям. Используйте эту статью.

Читайте также

Кстати, на сайте нет рекламы. У сайта нет цели самоокупаться, но если вам пригодилась информация можете задонатить мне на чашечку кофе в макдаке. Лайкнуть страницу или просто поблагодарить. Карма вам зачтется.

Источник

Cron linux python 3

Я, как настоящий старовер, решил построить «data-pipeline» без коннекторов и DAG-менеджеров. Положив два перста на мышку, началась упорная работа. Разобрался с API рекламных систем, установил драйвер bigquery, залил первую таблицу в датасет. Победа была близка, осталось всё автоматизировать. Я начал разворачивать Airflow, а потом проснулся и вспомнил про cron.

Вспомнив про ранее купленный VPS, куда я деплоил свой tf-idf кластеризатор. Было решено залить скрипт на сервер и настроить его запуск на 6 утра ежедневно.

Cron — это демон, а демон — это программа работающая в фоновом режиме. Ну а если вы программировали на Python — вам должны быть знакомы процессы-демоны. Запуск Cron-задания — это легко, но только в случаях когда мы говорим об выполнении php и bash скриптов. С Python всё иначе.

Устанавливаем Python на сервер

Выполняем, указные команды на примере Ubuntu.

Проверяем успешность установки командой python3.

Создаем виртуальное окружение virtalenv

Следующий шаг — изолировать наш проект в отдельное виртуальное окружение, куда мы будем устанавливать нужные нам библиотеки.

Теперь мы видим рядом в консоли перед строкой приписку (venv) — это значит, что мы в виртуальном окружении.

Запуск Python-скрипта с помощью Сron

Давай потестируем то, что у нас получилось на маленьком скрипте, который будет писать в файл дату и время его активации. Таким образом мы проверим как работает cron. Тестовый скрипт, который мы положим в корень папки проекта, у меня это / home / iakulshin / pipeline, заливаем через файловый менеджер filezilla и прочие, если вы хардкорный девопс-дата-инженер удачи вам с nano. Заливаем скрипт указанный ниже в нашу папку.

Давайте попробуем создать cron задание для тестового запуска. В целом нам будут нужны 2 команды:

Появлеятся файлик с крон задачами в редакторе nano. Наша задача установить задание, которое будет запускать наш скрипт каждую минуту.

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

Как понять что Cron срабатывает?

Чтобы удостовериться, что cron-таск отрабатывает, нам необходимо добавить задачу и обратиться к логам сервера, для этого идем в консоль и пишем следующую команду:

В нем вы увидите следующие записи:

Это означает, что cron срабатывает и воспроизводит команду, которую вы указали после звездочек. Но что делать, если python-скрипт всё еще не работает?

Cron срабатывает но Python-скрипт не выполняется

Самая типичная проблема, которая связана с «холостым» крон-таском — это недоступность библиотек, неверный выбор virtual env и версии python. Способ выбранный выше — это способ к которому я пришел спустя десяток часов поисков и изучения stackoverflow. Что нужно проверить для успешного запуска скрипта:

Возьмите команду, которую собирались добавь в крон и запустите её, это поможет словить ошибки связанные с недоступностью библиотек. В моем случае Скрипт не видел импортируемый файл, это я вылечил добавлением папки в системный путь. Добавляем в скрипты следующий код:

Если скрипт запускается по прямой команде из консоли, но cron всё еще не выполняется, то ошибка 100% в том, что ваш скрипт запускается не из под virtualenv или вы запускаете скрипт из под python не подходящей версии, поэтому проверяем следующее:

  1. Мы перешли в папку со скриптом командой cd
  2. Мы обратились к интерпретатору python3 находящемуся в папке с виртуальным окружением нашего проекта.
Читайте также:  Systemctl linux ������� ������

В целом данный гайд должен помочь вам разобраться с запуском Python скриптов с помощью Cron. Однако, я оставлю ссылки на полезные треды в stackoverflow, где представлены дополнительные способы решения этой проблемы.

Источник

How to Schedule a Python Script Cron Job

Jan 24, 2018 · 3 min read

Last Updated: 24 July 2019

Want to talk through an automation problem? Click here to schedule a free no-pressure call with me and we can just talk about your problem a bit

I found not necessarily conflicting data regarding how to set-up a Python script as a cron job across various sources, but the information was not as clear as it could have been in my opinion.

So this is my quick tutorial..

Update : You can also watch a video of me implementing another Python script as a cron job in not even 10 minutes, https://www.youtube.com/watch?v=kL5rmcxwgSs

My script

You do not need to change the f i le permissions of the Python file or include a shebang e.g. #!/usr/bin/python3, unless, you want to set-up your cron job like the last example in this article.

Cron Jobs and Virtual Environments

Python Virtual Environments are a staple of Python development, https://packaging.python.org/guides/installing-using-pip-and-virtualenv/, allowing a developer to isolate versions of Python, library requirements etc. But this introduces the question, “How do I access the modules of that environment”. After creating the environment, activate it, and execute

The returned path is the Python executable to use in the cron job definition, and the environment-specific modules will be available.

Set-up the Cron Job

If your Python script does not require any root permissions, in the terminal, use the command:

Using sudo actually gave me a headache and I could not get my basic cron job to execute.

Want to talk through an automation problem? Click here to schedule a free no-pressure call with me and we can just talk about your problem a bit

Update : You can also watch a video of me implementing another Python script as a cron job in not even 10 minutes, https://www.youtube.com/watch?v=kL5rmcxwgSs

File Paths

Once you have the editor and cron-table open, set up the cron job. For the most part, absolute urls should be used (even for the Python executable), or, relative urls can be used but a few additional inline commands will be required:

In my examples, the Python file was located at /home/gavin/python-job.py. The following example uses absolute urls for the script and Python executable

Alternatively, unless you are using a virtual environment as mentioned earlier, the Python 3 executable can be located using command substitution

Using relative urls requires changing directories

Alternative Approach: Executable Python Script

This requires changing your file permissions on the Python script and making it executable, and it will need a shebang e.g. #!/usr/bin/python3 (or whichever path leads to your python executable), at the top of the file.

Allow the Python script to executable

This will allow you to setup your cron job in the following manner:

That’s all for now, help it clears up a few things. Always appreciate feedback and thoughts.

Want to talk through an automation problem? Click here to schedule a free no-pressure call with me and we can just talk about your problem a bit

Update : You can also watch a video of me implementing another Python script as a cron job in not even 10 minutes, https://www.youtube.com/watch?v=kL5rmcxwgSs

Other articles or sources which helped me along the way:

Источник

Оцените статью