簡體   English   中英

在OSX Startup上啟動獨角獸

[英]Start unicorn on OSX Startup

我目前正在osx lion下使用rvm和unicorn進行服務器管理。 我也使用gemset。

所以為了啟動我的服務器我做以下事情:

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

現在我希望這台服務器在我的電腦啟動時啟動。 我讀了一些關於將一個plist文件添加到~/Library/LaunchAgents/並使用launchctl激活它的launchctl但我不知道在這個plist文件中寫什么來啟動我的服務器。

有任何想法嗎? 我認為這很困難,因為寶石需要通過cd進入這個目錄來激活。

謝謝你的幫助。

您可能希望將其作為LaunchDaemon運行,而不是LaunchAgent。 守護進程在系統上下文中運行,因此可以在任何人登錄之前在系統啟動時運行。代理在登錄會話中運行,因此在用戶登錄之前不會啟動(並以用戶身份運行,而不是以root身份運行,如果有兩個用戶通過快速切換立即登錄,他們將為每個用戶運行副本,並且...)。 守護進程與代理的.plist文件本身幾乎相同,區別在於您是將它放在/ Library / LaunchDaemons還是/ Library / LaunchAgents中。

文件本身取決於一些事情。 我假設它需要在系統啟動時啟動。 它是否會守護自己(即落入后台)? launchd不喜歡它自己啟動的程序,因為它希望能夠監視它們,並且如果它們崩潰/退出可能會重新啟動它們。 如果獨角獸有選擇不守護,那就用它; 如果沒有,您需要稍微更改.plist文件以適應它。 首先,這是一個基本的run-at-startup 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>

如果unicorn守護自己,你需要添加它(在</dict>行之前):

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

如果它沒有守護進程(或者你可以通過更改ProgramArguments讓它跳過守護進程),你可以選擇添加它:

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

將文件命名為/Library/LaunchDaemons/local.unicorn.plist(名稱應與標簽匹配),將所有權設置為root:wheel,權限設置為600.您可以使用sudo launchctl load /Library/LaunchDaemons/local.unicorn.plist激活它sudo launchctl load /Library/LaunchDaemons/local.unicorn.plist ,或重啟。

編輯:為了排除故障,您可以將以下內容添加到.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>

編輯3:我不熟悉rvm以及它如何處理它的配置,但聽起來你需要設置一些環境變量來正確設置它。 由於您沒有進入常規shell中的目錄,因此.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發射的獨角獸前所有必要的安裝文件。 您可以使用shell腳本執行此操作,或者僅將必要的命令序列作為(單個long)參數包含在shell中。 為此,請使用以下內容替換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/ruby-1.9.2-head@q/bin/unicorn -c /Users/server/Sites/Rails/q/config/unicorn.rb -E production</string>
        </array>

(但不要輸出任何不存在的rvmrc文件。)

創建一個bash腳本:

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

保存並使其可執行:

chmod +x scriptname.sh

然后,假設您正在運行OS X,請在“系統首選項”>“帳戶”>“登錄項”中添加此文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM