launchd
запускает Daemons ( /Library/LaunchDaemons
или /System/Library/LaunchDaemons
) от имени пользователя root и запускает их независимо от того, вошли пользователи или нет. Агенты запуска ( /Library/LaunchAgents/
или ~/Library/LaunchAgents/
) запускаются, когда пользователь вошел в систему как этот пользователь. Вы не можете использовать setuid для смены пользователя, запускающего скрипт на демонах. /System
Каталог зарезервирован для Mac OS X задач , поэтому я рекомендую положить ваш launchd
plists в либо /Library
или ~/Library
папку , как это имеет смысл.
Итак, первый шаг - определить, делаете ли вы агент или демон.
Второй шаг - создать .plist
файл. Вы можете использовать программы на основе графического интерфейса, такие как 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
время создания демона (выполняется постоянно) или в ~/Library/LaunchAgents
(только если вы вошли в систему) или /Library/LaunchAgents
(любой пользователь вошел в систему).
Для запуска задания, которое вы хотите запустить, launchctl
необходимо загрузить файл. Для элементов в /Library
, вы должны использовать sudo: например,sudo launchctl load -w /PATH/TO/PLIST
Для справки также ознакомьтесь со следующими вопросами о суперпользователе : команда Launchd от имени пользователя root , загрузка системного демона и как заставить скрипт запускаться каждый день