Я хочу, чтобы скрипт (bash / zsh / ruby / ...) запускался во время загрузки в OS X. Какой самый простой способ сделать это, не связываясь с файлами xml / plist, и предпочтительно не нужно создавать мета AppleScript ,
Я хочу, чтобы скрипт (bash / zsh / ruby / ...) запускался во время загрузки в OS X. Какой самый простой способ сделать это, не связываясь с файлами xml / plist, и предпочтительно не нужно создавать мета AppleScript ,
Ответы:
MacOS X использует Vixie cron, который имеет специальные метатеги для запуска во время перезагрузки. См. Справочную страницу для формата файла.
что-то вроде:
@reboot /path/to/script.sh
в вашем crontab будет работать. Я не уверен, что это лучшее решение, чем launchd, у вас, вероятно, больше мета-инструментов, которые смотрят на launchd, чем cron.
Если вы измените свое мнение:
<?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>com.superuser.245713</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/script.sh</string>
</array>
<key>UserName</key>
<string>someuser</string>
</dict>
</plist>
Хранить как com.superuser.245713.plist
в /Library/LaunchAgents/
и сделать root:wheel
владельца / группу.
/Library/LaunchAgents
а не /System/Library/LaunchDaemons
так как /System
это OS-конкретные вещи , и один под /Library
используется больше для материала третьей стороны. Кроме того, LaunchDaemons
«должен содержать элементы, которые будут запускаться от имени пользователя root, обычно фоновые процессы», где LaunchAgents
«запускаться от имени пользователя или в контексте пользовательского пространства». Источником этих цитат является отличная статья по launchd, с которой я консультируюсь по вопросам launchd.
Существуют также крюки входа, если вы предпочитаете, чтобы скрипт запускался (как root), когда пользователь входит в систему, а не при загрузке машины.
cron
в OS X не так уж хорошо с регистрацией по умолчанию (эта тема была всего несколько дней назад).