Prophet
Я вижу будущее!И ты по прежнему клепаеш говнокод
СЛИВ.Материала 2018.Да я знаю что многие видели, но не новореги (в большинстве случаев)
Если интересно как применять в жизни, то покажите что вам это нужно.Примеры будут такие:"НАСТРАИВАЕМ СКАЧИВАНИЕ СЕРИАЛОВ ", "ПИШЕМ СВОЙ «ДРОПБОКС»", "БЭКАПИМ И ШИФРУЕМ ДАННЫЕ ПРИ ПОДКЛЮЧЕНИИ ФЛЕШКИ ","ДРУГИЕ ВОЗМОЖНОСТИ ".
P.S.Работает на некотрых сборках линукса.
АВТОМАТИЗИРУЕМ MACOS ПРИ ПОМОЩИ PYTHON И LAUNCHCTL
Launchctl — это утилита, которая знакома каждому опытному маководу, но при этом многие избегают связываться с ней лишний раз. А зря! Этот универсальный лаунчер — один из важнейших компонентов системы. Изучив его нас тройки, ты сможешь делать массу интересных и полезных вещей. Я покажу три при мера того, как launchctl может при годиться в жизни.
Благодаря гибкости нас троек launchd, этот сервис заменил в macOS целый список более старых систем, которые пришли из Unix. Он управляет процессом загрузки ОС и сервисов (вместо init), он реагирует на подключения по сети (вместо inetd), он же запускает скрип ты по времени (вместо cron) и при разных условиях. Мы воспользуемся этими богатыми возможностями для настройки всякой автоматизации: запуска скриптов по времени, срабатывания при помещении файла в папку, при изменении файла и при подключении внешнего носителя. Я буду писать именно про launchctl, поскольку работаю в macOS, но если ты предпочитаешь Linux, то можешь позаимствовать идеи и скрипты, которые мы будем писать, и про делать все то же самое при помощи systemd. Эта система похожа на launchd и есть во многих современных дистрибутивах. Однако ее настройки в корне отличаются, и параллельно разбирать еще и их я не возьмусь.
АГЕНТЫ И ДЕМОНЫ Файлы с правилами — это XML с расширением .plist. Внутри содержатся инструкции, которые указывают launchd, что и когда запускать. Эти файлы разложены в системе по пяти папкам:
• ~/Library/LaunchAgents — агенты текущего пользователя;
• /Library/LaunchAgents— агенты для всех пользователей;
• /Library/LaunchDaemons — демоны для всех пользователей;
• /System/Library/LaunchAgents — системные агенты (входят в состав macOS);
• /System/Library/LaunchDaemons— системные демоны.
Отличие агентов от демонов довольно тонкое: демоны — это процессы, которые запускаются сразу после загрузки машины, а агенты могут работать только после логина в систему (соответственно, демонов для конкретного пользователя не бывает). К тому же демоны после активирования работают непрерыв но, а агенты обычно срабатывают при определенных условиях. Делать мы будем именно агенты и для личного пользования, так что первая папка из списка подойдет как нельзя лучше.
ПРОСТОЙ КОНФИГ: ЗАПУСК ПО ВРЕМЕНИ Начнем с самого простого — запуска чего‐нибудь в определенное время. Вот как выглядит один из самых простых вариантов конфига.
Несмотря на развесистый вид, структура здесь довольно несложная. Внутри основного словаря ( ) идут ключи и следом — параметры к ним. Иногда это строки, иногда массивы, иногда вложенные словари. <dict> За меняй слово «название» на какое‐нибудь название (обычно «com.домен.имя» — я, например, наз вал тестовый агент ), укажи путь к исполняемому файлу в качестве первого параметра , а затем задай, во сколько и по каким дням запускать. com.and.launchtest ProgramArguments
В примере выставлено время 1:30 каждую субботу. Если ты снесешь ключ Day, скрипт начнет запускаться в половине второго каждую ночь, а если уберешь и , то каждые пол часа. Думаю, ты понял идею. Аналогичная запись в crontab выглядела бы как Day Hour.
[CODE
]0 30 1 * 6 <путь к файлу>
[/CODE]
Если команда, которую ты запускаешь, принимает аргументы, то их нужно перечислить после пути, добавив дополнительные поля . Например:
Когда все будет готово, сохраняем файл в ~/Library/LaunchAgents/ . Хорошей идеей будет сразу прописать в названии условия запуска, что бы потом было легче ориентироваться. Например, мой тестовый конфиг я сохранил как com.and.launchtest.StartInterval.plist
ТОНКОСТИ АКТИВАЦИИ К сожалению, обратная сторона гибкости — это развесистость настроек. Даже включать и выключать конфиги launchd можно несколькими способами. Вот старый и наиболее простой. Для загрузки пиши:
И для выгрузки:
Ключ -w заодно включает флаг enabled, что экономит нам один шаг (Launchctl enable ) и сразу активирует конфиг. Помни, что после загрузки компьютера и входа в систему все агенты, лежащие в соответствующих папках, будут загружены автоматически. Именно поэтому при выгрузке удобно тоже добавлять — тог да launchctl запомнит, что конфиг неактивен.
Можешь спокойно пользоваться этими командами, однако если откроешь man, то узнаешь, что они считаются устаревшими и поддерживаются лишь для совместимости. Более правильный способ — использовать команды bootstrap и bootout . Они требуют указывать, помимо пути к файлу конфигурации, domain‐target, который состоит из домена и UID пользователя. Целиком команды будут выглядеть вот так:
И для выгрузки:
Узнать свой UID можешь командой id -u. Первый пользователь компьютера обычно записан под номером 502.
Другая команда, которую хорошо помнить, — это list . Что бы проверить, какие из твоих конфигов загружены, можешь написать:
Опять же — существует более современный, более продвинутый и, конечно, более замороченный метод:
На выходе будет куда больше информации, чем при запросе списка. Но опять же, использовать совершенно не обязательно. В ответ на вопрос о том, когда устаревшие команды перестанут работать, кто‐то из раз работчиков ответил на форуме, что на старый синтаксис слишком много завязано, что бы убирать его.
Launchctl — это утилита, которая знакома каждому опытному маководу, но при этом многие избегают связываться с ней лишний раз. А зря! Этот универсальный лаунчер — один из важнейших компонентов системы. Изучив его нас тройки, ты сможешь делать массу интересных и полезных вещей. Я покажу три при мера того, как launchctl может при годиться в жизни.
Благодаря гибкости нас троек launchd, этот сервис заменил в macOS целый список более старых систем, которые пришли из Unix. Он управляет процессом загрузки ОС и сервисов (вместо init), он реагирует на подключения по сети (вместо inetd), он же запускает скрип ты по времени (вместо cron) и при разных условиях. Мы воспользуемся этими богатыми возможностями для настройки всякой автоматизации: запуска скриптов по времени, срабатывания при помещении файла в папку, при изменении файла и при подключении внешнего носителя. Я буду писать именно про launchctl, поскольку работаю в macOS, но если ты предпочитаешь Linux, то можешь позаимствовать идеи и скрипты, которые мы будем писать, и про делать все то же самое при помощи systemd. Эта система похожа на launchd и есть во многих современных дистрибутивах. Однако ее настройки в корне отличаются, и параллельно разбирать еще и их я не возьмусь.
АГЕНТЫ И ДЕМОНЫ Файлы с правилами — это XML с расширением .plist. Внутри содержатся инструкции, которые указывают launchd, что и когда запускать. Эти файлы разложены в системе по пяти папкам:
• ~/Library/LaunchAgents — агенты текущего пользователя;
• /Library/LaunchAgents— агенты для всех пользователей;
• /Library/LaunchDaemons — демоны для всех пользователей;
• /System/Library/LaunchAgents — системные агенты (входят в состав macOS);
• /System/Library/LaunchDaemons— системные демоны.
Отличие агентов от демонов довольно тонкое: демоны — это процессы, которые запускаются сразу после загрузки машины, а агенты могут работать только после логина в систему (соответственно, демонов для конкретного пользователя не бывает). К тому же демоны после активирования работают непрерыв но, а агенты обычно срабатывают при определенных условиях. Делать мы будем именно агенты и для личного пользования, так что первая папка из списка подойдет как нельзя лучше.
ПРОСТОЙ КОНФИГ: ЗАПУСК ПО ВРЕМЕНИ Начнем с самого простого — запуска чего‐нибудь в определенное время. Вот как выглядит один из самых простых вариантов конфига.
Код:
<?xml version="1.0" encoding="UTF‐8"?>
<!DOCTYPE plist PUBLIC "‐//Apple//DTD PLIST 1.0//EN" "http://www. apple.com/DTDs/PropertyList‐1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>название</string>
<key>ProgramArguments</key>
<array>
<string>путь к файлу</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key><integer>30</integer>
<key>Hour</key><integer>1</integer>
<key>Day</key><integer>6</integer>
</dict>
</dict>
</plist>
Несмотря на развесистый вид, структура здесь довольно несложная. Внутри основного словаря ( ) идут ключи и следом — параметры к ним. Иногда это строки, иногда массивы, иногда вложенные словари. <dict> За меняй слово «название» на какое‐нибудь название (обычно «com.домен.имя» — я, например, наз вал тестовый агент ), укажи путь к исполняемому файлу в качестве первого параметра , а затем задай, во сколько и по каким дням запускать. com.and.launchtest ProgramArguments
В примере выставлено время 1:30 каждую субботу. Если ты снесешь ключ Day, скрипт начнет запускаться в половине второго каждую ночь, а если уберешь и , то каждые пол часа. Думаю, ты понял идею. Аналогичная запись в crontab выглядела бы как Day Hour.
[CODE
]0 30 1 * 6 <путь к файлу>
[/CODE]
Если команда, которую ты запускаешь, принимает аргументы, то их нужно перечислить после пути, добавив дополнительные поля . Например:
Код:
<key>ProgramArguments</key>
<array>
<string>say</string>
<string>В Петропавловске‐Камчатском полночь</string> </array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key><integer>0</integer> <key>Hour</key><integer>15</integer>
</dict>
Когда все будет готово, сохраняем файл в ~/Library/LaunchAgents/ . Хорошей идеей будет сразу прописать в названии условия запуска, что бы потом было легче ориентироваться. Например, мой тестовый конфиг я сохранил как com.and.launchtest.StartInterval.plist
ТОНКОСТИ АКТИВАЦИИ К сожалению, обратная сторона гибкости — это развесистость настроек. Даже включать и выключать конфиги launchd можно несколькими способами. Вот старый и наиболее простой. Для загрузки пиши:
Код:
$ launchctl load ‐w ~/Library/LaunchAgents/<конфиг.plist>
И для выгрузки:
Код:
$ launchctl unload ‐w ~/Library/LaunchAgents/<конфиг.plist>
Ключ -w заодно включает флаг enabled, что экономит нам один шаг (Launchctl enable ) и сразу активирует конфиг. Помни, что после загрузки компьютера и входа в систему все агенты, лежащие в соответствующих папках, будут загружены автоматически. Именно поэтому при выгрузке удобно тоже добавлять — тог да launchctl запомнит, что конфиг неактивен.
Можешь спокойно пользоваться этими командами, однако если откроешь man, то узнаешь, что они считаются устаревшими и поддерживаются лишь для совместимости. Более правильный способ — использовать команды bootstrap и bootout . Они требуют указывать, помимо пути к файлу конфигурации, domain‐target, который состоит из домена и UID пользователя. Целиком команды будут выглядеть вот так:
Код:
$ launchctl bootstrap gui/<твой UID> <путь к файлу>
И для выгрузки:
Код:
$ launchctl bootout gui/<твой UID> <путь к файлу>
Узнать свой UID можешь командой id -u. Первый пользователь компьютера обычно записан под номером 502.
Другая команда, которую хорошо помнить, — это list . Что бы проверить, какие из твоих конфигов загружены, можешь написать:
Код:
$ launchctl list | grep <название>
Опять же — существует более современный, более продвинутый и, конечно, более замороченный метод:
Код:
$ launchctl print <домен>/<UID>
На выходе будет куда больше информации, чем при запросе списка. Но опять же, использовать совершенно не обязательно. В ответ на вопрос о том, когда устаревшие команды перестанут работать, кто‐то из раз работчиков ответил на форуме, что на старый синтаксис слишком много завязано, что бы убирать его.
Если интересно как применять в жизни, то покажите что вам это нужно.Примеры будут такие:"НАСТРАИВАЕМ СКАЧИВАНИЕ СЕРИАЛОВ ", "ПИШЕМ СВОЙ «ДРОПБОКС»", "БЭКАПИМ И ШИФРУЕМ ДАННЫЕ ПРИ ПОДКЛЮЧЕНИИ ФЛЕШКИ ","ДРУГИЕ ВОЗМОЖНОСТИ ".
P.S.Работает на некотрых сборках линукса.
Последнее редактирование: