[英]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.