Автоматизируйте задачи с 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.
Надеюсь, это помогло!