launchdзапускає Daemons ( /Library/LaunchDaemonsабо /System/Library/LaunchDaemons) як корінь і запускатиме їх незалежно від того, користувачі ввійшли чи ні. Агенти запуску ( /Library/LaunchAgents/або ~/Library/LaunchAgents/) запускаються, коли користувач зареєстрований як цей користувач. Не можна використовувати setuid для зміни користувача, який запускає скрипт на демон. /SystemКаталог зарезервований для Mac OS X завдань , тому я рекомендую покласти ваш launchdplists в яких /Libraryабо ~/Libraryпапку , як це має сенс.
Отже, перший крок - це визначення агента чи демона.
Другий крок - зробити свій .plistфайл. Ви можете використовувати програми на основі GUI, такі як Lingon, щоб допомогти з цим або просто скористатися улюбленим текстовим редактором:
Зразок .plistдля запуску сценарію щогодини ( StartIntervalабо StartIntervalCalendarце потрібні нам ключі - StartIntervalщоб елемент траплявся щосекунди x, StartIntervalCalendarпротягом певного часу та / або дати. Див. 126907 в SuperUser, наприклад, зроблений із StartCalendarInterval):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.IDENTIFIER_HERE.SOMETHING</string>
<key>OnDemand</key>
<true/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
</dict>
</plist>
Змініть .plistнеобхідне, щоб вказати на ваш скрипт та будь-які аргументи за необхідності (аргументи знаходяться в окремих рядках) та збережіть файл із тим самим іменем, що й значення Label, але .plistв кінці. (наприклад, local.my-mac.flickrstatsбуде збережено як local.my-mac.flickrstats.plist). Якщо ви ще цього не зробили, перемістіть цей .plistфайл до, /Library/LaunchDaemonsстворюючи Daemon (працює весь час) або до ~/Library/LaunchAgents(тільки ви ввійшли в систему) або /Library/LaunchAgents(будь-який користувач увійшов у систему).
Щоб почати завдання, яке потрібно виконати, launchctlяк потрібно, щоб завантажити файл. Для предметів у /Library, слід використовувати sudo: наприклад,sudo launchctl load -w /PATH/TO/PLIST
Для ознайомлення також ознайомтеся з наступними питаннями про Super User: команда Launchd як root , Завантажте системний демон і як я можу змусити сценарій запускатися щодня