Полное практическое руководство по автоматизации сценариев в системах UNIX (Linux и macOS).

Вы замечаете, что запускаете один и тот же скрипт Python каждый день или каждую неделю?

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

Cron — это планировщик заданий на основе времени в системах Unix/Linux, который позволяет автоматизировать задачи для автоматического запуска через определенные промежутки времени.

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

Кроме того, он довольно гибкий и простой в использовании.

В этой статье мы более подробно рассмотрим планирование cron и то, как вы можете использовать его для автоматизации своих собственных скриптов Python.

Я познакомлю вас с удобным для начинающих примером сценария и предоставлю вам пошаговое руководство по настройке простого расписания cron.

К концу этой статьи вы будете на пути к автоматизации ваших собственных скриптов с помощью cron!

Что такое Крон?

Cron — это мощный инструмент, который может помочь вам автоматизировать задачи и оптимизировать рабочий процесс.

Задание cron — это просто запланированная задача, которая запускается в вашей системе в указанное время или с заданным интервалом.

Это простой, но эффективный способ планирования задач, таких как резервное копирование или отчеты, чтобы они выполнялись последовательно без какого-либо вмешательства.

Что отличает cron от других инструментов планирования, так это его простота и гибкость.

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

Кроме того, cron использует файл конфигурации, называемый вкладкой cron (crontab), который содержит список команд и соответствующие им расписания.

Команды также можно запланировать для запуска в определенное время или с интервалами, например, «каждый день в 3:00», или с интервалами, например, «каждые 5 минут».

Это делает cron одним из самых универсальных инструментов планирования, доступных для автоматизации ваших задач.

Создать скрипт

Прежде чем мы сможем автоматизировать сценарий с помощью cron-планирования, очевидно, нам сначала нужно его создать.

Для целей этого руководства мы создадим очень простой скрипт Python, который выполняет следующие задачи:

  • запоминает отметку времени выполнения
  • создает файл .txt
  • записывает метку времени внутри файла
  • дает имени файла уникальное имя (на основе метки времени)

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

Вот код Python для скрипта.

Вы можете просто скопировать и вставить его в файл с именем script.py в каталоге по вашему выбору:

Для целей этого примера предположим, что сценарий сохранен в папке «Рабочий стол» в системе macOS (аналогично Linux):

/Users/username/Desktop/script.py

Вы можете сохранить файл в любом удобном для вас каталоге.

После того, как вы создали сценарий, вы можете перейти к его тестированию, а затем настроить задание cron для его автоматизации.

Примечание. Используйте абсолютные пути (не относительные!), иначе вы не будете знать, где ваши файлы могут быть сохранены во время планирования cron.

Протестировать скрипт

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

Чтобы протестировать сценарий, откройте Терминал и перейдите в каталог, в котором находится сценарий.

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

cd /Users/username/Desktop/

Примечание. Замените ‘username’ своим именем пользователя. В моем случае это /Users/ruslanbrilenkov/Desktop/.

Как только вы окажетесь внутри каталога со скриптом, вы можете запустить скрипт, введя следующую команду в Терминале:

python3 script.py

*или python script.py, если вы все еще используете Python версии 2.

Это должно создать новый файл с отметкой времени в имени и внутри файла.

Повторив это несколько раз, вы должны увидеть несколько текстовых файлов с разными временными метками в одном и том же каталоге (с именем results/).

Если вы видите ожидаемые результаты, теперь мы можем перейти к настройке задания cron для автоматизации скрипта.

Понимание планирования cron

Чтобы автоматизировать скрипт с помощью cron, нам нужно настроить задание cron с помощью crontab и запланировать выполнение задания на определенные временные интервалы.

Двумя основными частями этого процесса являются следующие:

  1. настройте задание cron, используя crontab
  2. запланировать выполнение задания на определенные временные интервалы

Вот подробное объяснение этих частей:

1. Настройте задание cron с помощью crontab

Команда crontab используется для создания и управления заданиями cron пользователя. Вот шаги для настройки задания cron с помощью crontab:

  • Откройте терминал и введите crontab -e, чтобы войти в пользовательский файл crontab.
  • В этом файле добавьте новую строку с соответствующими значениями для желаемого графика работы (используя формат * * * * *)
  • Затем укажите команду для запуска в запланированное время, например, /usr/bin/python3 /home/user/myscript.py
  • Сохраните и закройте файл crontab.

Например, если вы хотите запускать скрипт каждый день в 21:30, запись задания cron в файле crontab будет выглядеть так (более подробно ниже):

30 21 * * * /usr/bin/python3 /home/user/myscript.py

Примечание. crontab -e файл откроется в текстовом редакторе vim. Чтобы начать писать/вставлять что-либо, вам нужно набрать i на клавиатуре (это означает вставка). Когда вы закончите редактирование файла, введите ESC, а затем :wq (для записи+выход).

2. Запланируйте работу

Поначалу планирование Cron может показаться немного сложным.

Но планирование (символы звездочки выше, например, * * * * *) в cron следует определенному формату.

Вкладки Cron организованы в столбцы, которые представляют разные части расписания: minute, hour, day of the month, month of the year и day of the week.

Например, если вы хотите запланировать обновление системы каждый день в 6:00, ваша запись в crontab будет выглядеть так:

0 6 * * * apt-get update -y

Или, если вы хотите запускать скрипт (Python) в 23:00 каждый будний день (с понедельника по пятницу), используйте:

0 23 * * 1–5 /usr/bin/python3 /home/user/myscript.py

Наконец, если вы хотите запускать скрипт/задание каждую минуту, как мы будем делать в этом руководстве, используйте:

* * * * *

Если вы хотите попрактиковаться в расписании cron, есть веб-сайт crontab.guru, который является отличным редактором выражения расписания.

Помните, практика делает совершенным. После нескольких попыток вы освоитесь.

Теперь, когда вы понимаете планирование cron, вы готовы автоматизировать свой скрипт!

Ставим скрипт на автоматизацию

Теперь, когда вы создали сценарий и запланировали его выполнение с помощью cron, следующим шагом будет автоматизация сценария.

Еще раз важно убедиться, что все пути, которые вы используете внутри и снаружи скрипта, являются абсолютными (а не относительными!).

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

* * * * * /usr/local/bin/python3 /Users/ruslanbrilenkov/Desktop/script.py

Если вы не уверены в местонахождении вашего Python, введите в терминале:

which python3 or which python

Вы можете скопировать это местоположение в свой crontab.

Точно так же, если ваш терминальный каталог — это каталог с вашим сценарием, ввод pwd даст вам правильный абсолютный путь, если вы решите поместить свой сценарий в другой каталог.

Как только вы обновите файл crontab, сохраните его, и ваша работа уже будет запущена.

Чтобы убедиться, что ваше расписание cron работает правильно, введите crontab -l, чтобы просмотреть список всех активных заданий cron.

Наконец, подождите пару минут и посмотрите, как ваша папка results/ заполняется новыми файлами.

Да, детка, вот о чем мы говорим!

Автоматика в действии!

Примечание 1. Не забудьте удалить задание, когда закончите. В противном случае в ваш каталог будут добавляться новые файлы каждую минуту. В течение 24 часов вы можете получить 1440 файлов!

Примечание 2. Если вы используете macOS и не видите новых файлов на своем компьютере после выполнения всех предыдущих шагов, обязательно включите cron с разрешением Полный доступ к диску. Вот хорошее решение.

Краткое содержание

В этом руководстве вы узнали, как автоматизировать задачи, используя комбинацию crontab и Python.

В частности, вы узнали, как создать сценарий Python для выполнения определенной задачи, как запланировать сценарий с помощью cron и как собрать все вместе на автопилоте.

Что дальше?

Используя совместно crontab и Python, вы можете автоматизировать широкий спектр задач, таких как обновление системы, отправка электронных писем по расписанию, создание резервных копий и em>файлы журналов и многое другое. Или даже автоматизировать сбор архивов для научных исследований:



Возможности автоматизации безграничны, и теперь у вас есть возможность справиться с любым сценарием автоматизации!

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

Всем удачной автоматизации!

P.S. И последнее, но не менее важное: автоматизация cron будет работать только тогда, когда работает сервер/машина. Если он выключен, ни одно задание не должно выполняться, потому что для работы демона cron должна быть запущена операционная система. Просто имейте это в виду.

Вам интересно узнать о развивающейся области Prompt Engineering? Хватай мою новую электронную книгу! Вы узнаете и освоите все, от фундаментальных концепций до практических советов и реальных приложений. Кроме того, вы получите бонус в виде 300 подсказок и несколько бесплатных ресурсов, которые помогут вам начать свое путешествие с помощью ИИ. Со всей этой ценностью, упакованной в одну электронную книгу, какова цена? Стоимость чашки кофе! Не упустите возможность поднять свои навыки на новый уровень!



Контакт

Если вы заинтересованы в подключении, вот ссылка на мой профиль LinkedIn.

Я хотел бы подключить и расширить наши профессиональные сети!

Если вам понравилась эта статья и вы хотели бы поддержать меня, я был бы невероятно признателен, если бы вы подписались на Medium, используя мою ссылку. Вы не только получите доступ ко всем историям на Medium, но и поможете мне продолжать создавать контент, который вам нравится — и все это бесплатно для вас!

Подпишитесь на DDIntel Здесь.

Посетите наш сайт здесь: https://www.datadriveninvestor.com

Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate