2012-01-02 2 views
3

私は現在、osx lionの下でサーバー管理にrvmとunicornを使用しています。 私もgemsetを使用しています。OSXスタートアップでユニコーンを開始

ので、私のサーバーを起動するために、私は次のようにします。

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

を今私は自分のコンピュータの起動時に、このサーバが起動します。 私は~/Library/LaunchAgents/にplistファイルを追加し、それをlaunchctlでアクティブにすることについて何かを読んだが、私のサーバを起動するためにこのplistファイルの中に何を書くべきか分からない。

任意のアイデア?また、私はそれが難しいと思う、gemsetはこのdirにcd'ingによって活性化する必要があるので。

ありがとうございました。

+0

あなたはOS Xであなたのユニコーンを開始するために管理しませんでした起動?はいの場合は、作業用のスクリプトをどこかに投稿してください。私はos xサーバで成功しなくても同じことをやろうとしています... – Yannis

答えて

9

LaunchAgentではなく、LaunchDaemonとして実行したいと思うかもしれません。デーモンはシステムコンテキストで実行されるため、誰かがログインする前にシステムの起動時に実行できます。エージェントはログインセッション内で実行されるため、ユーザーがログインするまで起動しません(rootではなく、高速切り替えで一度にログインすると、ユーザーごとにコピーが実行されます...)。 .plistファイル自体は、デーモンとエージェントの場合とほとんど同じですが、違いは/ Library/LaunchDaemonsか/ Library/LaunchAgentsのどちらに入れているかです。

ファイル自体はいくつかの要素によって異なります。私はそれがシステム起動時に開始される必要があると仮定しています。それは自分自身をデーモン化する(つまり、バックグラウンドに落とす)か? launchdは、自分自身をデーモン化するために起動するプログラムが好きではなく、それらを監視し、クラッシュ/終了した場合に再起動する可能性があります。ユニコーンがデーモン化しないオプションを持っている場合は、それを使用してください。もしそうでなければ、.plistファイルを少し変更してそれに適応させる必要があります。ユニコーンdaemonizes自体、あなたは(</dict>行の前に)これを追加する必要があります場合は

<?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> 

:まず、ここでは基本的な実行・アット・スタートアップLaunchDaemonの.plistファイルです

 <key>KeepAlive</key> 
     <false/> 
     <key>AbandonProcessGroup</key> 
     <true/> 

それならば/ライブラリ/ LaunchDaemons/LOCのようなファイルに何かを

 <key>KeepAlive</key> 
     <true/> 

名:デーモン化しない(またはあなたはそれがProgramArgumentsを変更することでdaemonizingをスキップするために得ることができます)、必要に応じて代わりにこれを追加することができます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::のようなものを追加し、別のユーザーとして実行するために、私はRVMに非常に精通していないよ、それは、その構成をどのように扱うかが、あなたは、いくつかを設定する必要がありますように聞こえます環境変数を適切に設定する必要があります。通常のシェルではディレクトリにcdしていないので、.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> 

(ただし、存在しないrvmrcファイルのいずれかをsourceingておきます。)

+0

unicornにはフラグ '-D'でデーモン化するオプションがありますので、現在はデーモン化しません。私はあなたのplistを試してみましょう。 – choise

+0

はうまく動作しません。ここに私のplistといくつかのターミナルコマンドがあります。 このコマンドでunicornを起動した後に動作します。 https://gist.github.com/a69109245f38eb6f359d どうぞご覧ください。 – choise

+0

'sudo launchctl load'コマンドでエラーが出ますか?システムログに何か示唆がありますか?私はデバッグ情報をもっと得る方法についていくつかのメモを追加しましたので、試してみてください...また、私はユニコーンがルートとして実行されると仮定しています、それは正しいですか? –

4

bashスクリプトを作成します。それは保存

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

をし、それを実行可能にします。

chmod +x scriptname.sh 

次に、あなたがOS Xを実行していると仮定すると、システム環境設定でこのファイルを追加]> [アカウント]> [ログイン項目。