launchd
запускає Daemons ( /Library/LaunchDaemons
або /System/Library/LaunchDaemons
) як корінь і запускатиме їх незалежно від того, користувачі ввійшли чи ні. Агенти запуску ( /Library/LaunchAgents/
або ~/Library/LaunchAgents/
) запускаються, коли користувач зареєстрований як цей користувач. Не можна використовувати setuid для зміни користувача, який запускає скрипт на демон. /System
Каталог зарезервований для Mac OS X завдань , тому я рекомендую покласти ваш launchd
plists в яких /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 , Завантажте системний демон і як я можу змусити сценарій запускатися щодня