launchd е инструмент за стартиране, спиране и управление на скриптове и процеси. Ако сте работили с всяка версия на Linux, може да сте запознати с cron. launchd е основно cron в macOS.

Какви са демоните?

Демоните (произнесени като "демони") са скриптове, които се изпълняват във фонов режим. За разлика от приложенията, демоните се изпълняват като процеси и не са под пряк контрол на потребителя или друго приложение. На MacOS те са под командването на стартиращата рамка, която решава кога да започне и да спре.

Необичайното име идва от демона на Максуел, въображаем агент, който подрежда молекули в експеримент на термодинамиката.

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

За да стартирате демони чрез launchd, ще трябва да напишете няколко скрипта. Най-често срещаният скриптов език е bash. Ако искате да научите повече за скриптове за баш, можете да разгледате наръчника ни за начинаещи за скриптове.

Използване на

Скриптовете в стартиращите се задействат от дефиниции на задачи, които са .plist файлове, съхранявани в конкретни директории. Тези XML файлове дават на заданието име, уточняват скрипта, който трябва да бъде стартиран, и посочват кога трябва да се изпълни скрипта. След като напишете своя скрипт, ще напишете и заредите определение на заданието, което стартира скрипта в подходящото време.

Дефиницията на заданието изглежда нещо като това, което е по-долу:

 етикет  local.restart  програма  /Users/user/Scripts/restart.sh  RunAtLoad 

Променете, ако е необходимо, след това го поставете в текстов файл с разширението .plist, преди да го поставите в правилната директория (вижте по-долу).

Има няколко ключови елемента на описанието на длъжността:

  • Етикет: името на заданието в рамките на стартирането. Трябва да е уникален за всяка работа. Те са написани в обратна област нотация, и "местен" е голяма домейн за частни агенти.
  • Програма: пълен пътека на скрипта, който стартира тази длъжностна характеристика.
  • RunAtLoad: описва кога трябва да се изпълни скрипта. Има няколко различни варианта тук:
    • RunAtLoad : стартирайте веднага след зареждането на дефиницията на заданието. Пуска се само веднъж на товар.
    • StartInterval : стартирайте задачата на всеки n секунди. Този пример ще изпълнява заданието на всеки 7200 секунди или на всеки 2 часа.
       StartInterval  7200 
    • StartCalendarInterval : стартирайте заданието в определен час и дата. По-долу кодът ще изпълнява задачата всеки ден в 9 ч. Сутринта.
       StartCalendarInterval  час  9  минута  0 

Агенти срещу демони

След като напишете описанието на длъжността, ще трябва да го запазите в съответната директория.

стартира още разграничение между агенти и демони. Един агент работи от името на влезелия потребител, докато демон работи под коренния потребител. Това означава, че ако искате да ограничите скрипта до конкретен потребителски акаунт, можете да използвате агент. Ако искате нещо да се изпълнява без значение кой е влязъл, ще използвате демон.

Разликата между агенти и демони се извлича от мястото, където се съхраняват на компютъра:

  • "~ / Library / LaunchAgents" се изпълнява от името на влезлия потребител
  • "/ Library / LaunchDaemons" се изпълнява от името на root потребители

Трябва да запазите листчето на правилното място.

Зареждане на работни места в стартов

След като създадете скриптовете си и запазите агента си на правилното място, ще трябва да го заредите в програмата за launchctl . Това ще се случи автоматично при вход в бъдеще.

За да видите какво в момента се изпълнява в laucnhctl, можете да използвате launchctl list в терминала. Този гигантски списък може да бъде гравиран за вашия скрипт, като го маркирате с нещо като следното:

 списък за стартиране | grep local.restart 

За да заредите скрипт, отворете терминала и използвайте следната команда:

 launchctl load ~ / Библиотека / LaunchAgents / local.restart.plist 

За да премахнете скрипта от началната опашка, използвайте командата за unload :

 стартиране на разтоварване ~ / Library / LaunchAgents / local.restart.plist 

Зареждането на задача го поставя в опашката за стартиране и задачата ще се изпълнява в определеното в условията за стартиране време. Ако искате да изпълните скрипт веднага, без значение какво, трябва да използвате командата "старт":

 стартиране стартира local.restart 

Тази команда приема етикета на заданието и ще работи само ако заданието вече е заредено в програмата за launchctl .

заключение

Можете да използвате launchd за създаване на скриптове, които правят неща като почистване на файлове, рестартиране на сървъра по график или изпълнение на приложение, когато се появи определен файл. За да научите много повече за стартирането, можете да проверите насторията на laucnhd.

Кредит на изображението: Maxwell's_demon