Какой самый простой способ запустить скрипт во время загрузки в OS X?

12

Я хочу, чтобы скрипт (bash / zsh / ruby ​​/ ...) запускался во время загрузки в OS X. Какой самый простой способ сделать это, не связываясь с файлами xml / plist, и предпочтительно не нужно создавать мета AppleScript ,

Джон Башир
источник

Ответы:

7

MacOS X использует Vixie cron, который имеет специальные метатеги для запуска во время перезагрузки. См. Справочную страницу для формата файла.

что-то вроде:

@reboot /path/to/script.sh

в вашем crontab будет работать. Я не уверен, что это лучшее решение, чем launchd, у вас, вероятно, больше мета-инструментов, которые смотрят на launchd, чем cron.

Рич Гомолка
источник
Понравилось, вы доказали, что я не прав :-) Хотя cronв OS X не так уж хорошо с регистрацией по умолчанию (эта тема была всего несколько дней назад).
Даниэль Бек
это потрясающе.
Джон Башир
1
Обратите внимание, что cron, at и т. Д. В некоторой степени устарели в OS X. Я не могу найти явного заявления об этом в различных документах, и при этом я не знаю, насколько они агрессивно устарели, но launchd кажется в целом предпочтительным. Смотрите презентацию для ознакомления.
Норман Грей,
plist не будет работать для меня - это работает как шарм - спасибо! :-D
БГ Бруно
Честно говоря, не был уверен, что синтаксис будет таким же на OS X.
NobleUplift
6

Если вы измените свое мнение:

<?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владельца / группу.

Даниэль Бек
источник
1
Это , возможно , лучше поместить его в , /Library/LaunchAgentsа не /System/Library/LaunchDaemonsтак как /Systemэто OS-конкретные вещи , и один под /Libraryиспользуется больше для материала третьей стороны. Кроме того, LaunchDaemons«должен содержать элементы, которые будут запускаться от имени пользователя root, обычно фоновые процессы», где LaunchAgents«запускаться от имени пользователя или в контексте пользовательского пространства». Источником этих цитат является отличная статья по launchd, с которой я консультируюсь по вопросам launchd.
Даг Харрис
@DougHarris Спасибо за предложения! Я должен признать, что я просто набирал этот ad-hoc - хотя я обычно тестировал свои решения, я не хотел перезапускать свою машину для этого.
Даниэль Бек
Это очень хорошо, хотя мне больше нравится решение Vixie cron :)
Джон Бачир
Фактически, это должно быть помещено в / Library / LaunchDaemons. Агенты запускаются только в пользовательском сеансе, то есть они не будут работать (или, точнее, не будут иметь права на запуск), пока кто-то не войдет в систему, не будет запускаться снова каждый раз, когда кто-то входит в систему, и всегда будет работать как текущий вошедший в систему пользователь. Демоны запускаются (/ становятся подходящими для запуска) при загрузке, и хотя они обычно запускаются от имени пользователя root, их можно запускать от имени другого пользователя с ключом UserName.
Гордон Дэвиссон
2
@ the0ther Сеть не забывает.
Даниэль Бек
2

Существуют также крюки входа, если вы предпочитаете, чтобы скрипт запускался (как root), когда пользователь входит в систему, а не при загрузке машины.

Deditos
источник