2012-01-02 3 views
3

В настоящее время я использую rvm и единорог для управления сервером под osx lion. Я также использую gemset.Начать единорог при запуске OSX

так что для запуска моего сервера я сделать следующее:

cd /xyz/project 
unicorn -c /xyz/project/config/unicorn.rb -E production 

теперь я хочу этот запуск сервера, когда мой компьютер запускается. Я прочитал что-то о добавлении файла plist к ~/Library/LaunchAgents/ и активации его launchctl, но я понятия не имею, что писать в этом файле plist для запуска моего сервера.

любые идеи? также я думаю, что это сложно, потому что гемсет нужно активировать с помощью cd'ing в этот каталог.

спасибо за помощь.

+0

ли вам удастся начать единорога на OS X запускать? Если да, можете ли вы разместить где-нибудь свой рабочий сценарий? Я пытаюсь сделать то же самое на сервере os x без успеха ... – Yannis

ответ

9

Возможно, вы захотите запустить это как 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 файлов, которые не существуют.)

+0

unicorn имеет возможность демонзировать его с помощью флага '-D', поэтому в настоящее время он не будет демонамизировать. я попробую попробовать. – choise

+0

плохо его не работает. вот мой plist и некоторые команды терминала. начиная с единорога с этой командой впоследствии. https://gist.github.com/a69109245f38eb6f359d не могли бы вы взглянуть? – choise

+0

Получаете ли вы какие-либо ошибки при команде 'sudo launchctl load'? В системном журнале есть что-то наводящее на размышления? Я добавил несколько заметок о том, как получить дополнительную информацию об отладке, поэтому попробуйте это ... Кроме того, я предполагаю, что единорог должен работать от имени root, это правильно? –

4

Создать Баш скрипт:

#!/bin/sh 
cd /xyz/project 
unicorn -c /xyz/project/config/unicorn.rb -E production 

сохранить его и сделать его исполняемым:

chmod +x scriptname.sh 

Затем, если вы работаете в OS X, добавьте этот файл в System Preferences> Учетные записи> Вход Items ,

Смежные вопросы