Возможно, вы захотите запустить это как LaunchDaemon, а не LaunchAgent. Демоны запускаются в системном контексте и поэтому могут запускаться при запуске системы, прежде чем кто-либо войдет в систему. Агенты запускаются внутри сеансов входа в систему и, следовательно, не запускаются до тех пор, пока пользователь не войдет в систему (и запустится как пользователь не как root, а если два пользователя войдите в систему сразу с быстрым переключением, они будут запускать копию для каждого пользователя и ...). Сам файл .plist почти одинаковый для демонов и агентов, разница заключается в том, помещаете ли вы его в/Library/LaunchDaemons или/Library/LaunchAgents.
Файл сам по себе зависит от нескольких вещей. Я предполагаю, что его нужно запускать при загрузке системы. Развертывает ли он себя (т. Е. Падает на задний план)? startd не любит запускаемые ими программы, чтобы демоннизировать себя, поскольку он хочет иметь возможность контролировать их и, возможно, перезапускать их, если они выходят из строя/выходят. Если единорог имеет возможность не демонамизировать, используйте это; если нет, вам нужно немного изменить файл .plist, чтобы адаптироваться к нему. Во-первых, вот основной вводного при запуске-LaunchDaemon .plist файл:
<?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>Disabled</key>
<false/>
<key>Label</key>
<string>local.unicorn</string>
<key>ProgramArguments</key>
<array>
<string>/full/path/to/unicorn</string>
<string>-c</string>
<string>/xyz/project/config/unicorn.rb</string>
<string>-E</string>
<string>production</string>
</array>
<key>WorkingDirectory</key>
<string>/xyz/project</string>
<key>RunAtLoad</key>
<true/>
<key>EnableTransactions</key>
<false/>
</dict>
</plist>
Если сам единорог daemonizes, вам нужно добавить это (до </dict>
линии):
<key>KeepAlive</key>
<false/>
<key>AbandonProcessGroup</key>
<true/>
Если это не демон (или вы можете получить его, чтобы пропустить режим демона, изменив ProgramArguments), вы можете по желанию добавить вместо этого:
<key>KeepAlive</key>
<true/>
имени файл что-то вроде/Library/LaunchDaemons/LOC al.unicorn.plist (имя должно соответствовать метке), установите права собственности на root: wheel и разрешения на 600. Вы можете активировать его с помощью sudo launchctl load /Library/LaunchDaemons/local.unicorn.plist
или перезагрузившись.
EDIT: для устранения неполадок, вы можете добавить что-то вроде этого к .plist файла:
<key>StandardOutPath</key>
<string>/tmp/unicorn.out</string>
<key>StandardErrorPath</key>
<string>/tmp/unicorn.err</string>
<key>Debug</key>
<true/>
Затем выгрузить (sudo launchctl unload /Library/LaunchDaemons/local.unicorn.plist
) и перезагрузить его и проверить /var/log/system.log,/TMP /unicorn.out и /tmp/unicorn.err для подсказок о том, что происходит не так.
EDIT2: бежать как другой пользователь, добавить что-то вроде:
<key>UserName</key>
<string>choise</string>
EDIT3: Я не очень хорошо знаком с РВМ и как она обрабатывает его конфигурацию, но это звучит, как вам нужно установить некоторые переменные среды для правильной настройки. Поскольку вы не входите в каталог в обычной оболочке, файл .rvmrc никогда не запускается. Существует несколько способов решить эту проблему.
Во-первых, вы можете выяснить, что нужно установить переменные окружения, и добавить их в файл .plist с чем-то вроде этого:
<key>EnvironmentVariables</key>
<array>
<key>ruby_string</key>
<string>ruby-1.9.2-p136</string>
<key>gemset_name</key>
<string>unicorn</string>
</array>
... но это может быть немного хрупкими, особенно если они когда-либо изменятся; вам необходимо обновить файлы .rvmrc и .plist, чтобы они работали последовательно.
Возможно, было бы лучше, если бы он фактически открыл оболочку и source
все необходимые файлы настроек перед запуском единорога. Вы можете сделать это с помощью сценария оболочки или просто включив в командную строку необходимую последовательность команд (один длинный). Чтобы сделать это, замените раздел ProgramArguments с чем-то вроде этого:
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>source /etc/rvmrc; source /Users/server/.rvmrc; source .rvmrc; /Users/server/.rvm/gems/[email protected]/bin/unicorn -c /Users/server/Sites/Rails/q/config/unicorn.rb -E production</string>
</array>
(но оставить из sourceing любой из rvmrc файлов, которые не существуют.)
ли вам удастся начать единорога на OS X запускать? Если да, можете ли вы разместить где-нибудь свой рабочий сценарий? Я пытаюсь сделать то же самое на сервере os x без успеха ... – Yannis