Автоматизируйте задачи с Python с вашего Mac с помощью crontab

Пролог

Прежде чем писать следующие шаги, я бы порекомендовал установить последнюю версию Python с Homebrew. Homebrew - это менеджер пакетов, такой же, как pip и Anaconda, и, честно говоря, я просто использую его в этом примере, потому что часами безуспешно пытался запустить простое задание cron.

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

Я удалил свои версии Python 3.x, которые я установил (через pip и Conda), и начал с нуля - удаление также было проблемой.

Итак, допустим, вы работаете на своем Mac и используете дистрибутив Python по умолчанию, который, как мне кажется, должен быть 2.7.10. Лишь немногие разработчики обновляют модули в этой версии, поэтому при создании проектов лучше всего установить последнюю версию Python.

Я следовал Руководству по Real Python , чтобы установить Python 3 через Homebrew (на самом деле, несколько быстрых шагов), поэтому предполагаю, что вы сделали то же самое в этом посте.

Шаги

Откройте командную строку терминала на Mac и перейдите в домашний каталог, запустив cd ~/. Для меня это Users/Nakul.

Мы будем использовать встроенную в Mac OS функцию crontab для написания наших заданий cron.

Введите crontab -e и нажмите Enter.

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

Введите :q!, чтобы выйти из редактора.

Предполагая, что вы следовали приведенному выше руководству Homebrew, дважды проверьте путь установки Python. Вы можете сделать это, набрав which python3 в своем терминале.

Он должен отобразить /usr/local/bin/python3 (это псевдоним фактического места установки Homebrew, но это нормально, мы не будем сейчас вдаваться в подробности). Вы включите этот путь в синтаксис вашего задания cron, о чем мы и поговорим.

Прежде чем мы напишем задание cron, у нас должен быть скрипт, который мы хотим запустить. Я уже создал каталог /Documents/Python/cron в своем домашнем каталоге и создал простой сценарий под названием cron_test.py.

Примечание. Этот скрипт Python должен быть исполняемым, поэтому измените разрешения для этого, я только что запустил chmod 777 cron_test.py.

Сценарий cron_test.py просто создает каталог с текущими датой и временем в качестве имени.

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

Вы можете спросить, что это за первая строка, #!/usr/bin/python3. Эта строка называется shebang и указывает, как задание cron будет интерпретировать сценарий, поэтому в этом случае оно будет запускать cron_test.py с Python (как если бы вы выполнили Python cron_test.py в своем терминале).

Итак, у нас установлен Python 3.x, у нас есть скрипт Python, теперь давайте напишем задание cron для его запуска!

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

Синтаксис задания cron выглядит следующим образом:

*/1 * * * * cd ~/Documents/Python/cron && /usr/local/bin/python3 cron_test.py >> ~/Documents/Python/cron/cron.txt 2>&1

Что это значит? Давайте быстро это проанализируем.

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

cd ~/Documents/Python/cron && /usr/local/bin/python3 переходит в каталог, где находится скрипт, который вы хотите выполнить, и указывает использовать Python вместо Bash для выполнения (поскольку это скрипт Python, также помните, что мы добавили shebang в скрипт, я обнаружил, что он нужен быть в обоих местах работать).

cron_test.py - имя файла сценария.

>> ~/Documents/Python/cron/cron.txt указывает, куда выводить журналы, если при выполнении задания возникнут проблемы.

2>&1 просто отключает электронную почту, потому что по умолчанию задание cron пытается отправить электронное письмо, но у нас не указан адрес.

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

Не стесняйтесь просматривать веб-страницы, чтобы узнать больше о заданиях cron и crontab. Я решил написать это для тех, кто имеет фундаментальное представление о программировании и хотел как можно скорее написать задание для cron.

Надеюсь, это помогло!