在 Mac OS X 上安裝lighttpd 的時候,我使用 launchctl 來實現 lighttpd 的自動啓動。如今,只須要 unload 便可。 html
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.lighttpd.plist
這會當即中止 lighttpd 的運行。接下來,將 homebrew.mxcl.lighttpd.plist 從~/Library/LanuchAgents 目錄中移除。不然下次啓動系統的時候,lighttpd 又會啓動。 nginx
OpenResty 的編譯和安裝流程,在官網上講得很清楚,我再也不贅述。 shell
在這裏我假設 OpenResty 已經安裝到默認路徑 /usr/local/openresty 。 bash
修改 /usr/local/openresty/nginx/conf/nginx.conf ,將其中的 server 段下的listen 80 改成 listen 8080 。 app
這是由於 80 端口只能被 root 用戶啓動。而在本文中咱們是使用當前用戶啓動 nginx 的。 post
若是 8080 端口也被佔用,請自行換成可用端口。 測試
launchctl 依賴一個 plist 配置文件來工做。咱們須要手動建立這個文件。 spa
plist 是一種標準的 xml 格式,這種格式的詳細介紹,能夠看這裏:cocos2d-x中的plist文件格式詳解 。 .net
launchctl 對這個配置文件的格式有一些具體的要求,能夠查看 launchd.plist 。 rest
咱們建立的 ~/Library/LaunchAgents/org.openresty.plist 文件,內容以下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>org.openresty</string> <key>ProgramArguments</key> <array> <string>/usr/local/openresty/nginx/sbin/nginx</string> <string>-p</string> <string>/usr/local/openresty/nginx</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> <key>HardResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>512</integer> </dict> <key>SoftResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>512</integer> </dict> </dict> </plist>
注意其中 Label、Program和ProgramArguments 這三個 Key 是必須存在的。
KeepAlive 這個值建議設置成 false ,除非在 nginx.conf 中設置了 daemon off 。Wayne 在launchctl筆記 中做了解釋:
設定nginx登陸後自啓動後發現,因爲缺省狀況下是生成子進程後父進程當即退出,致使launchctl在KeepAlive配置的做用下反覆啓動nginx,產生了不少錯誤信息,因此在設置守護進程的時候要注意規避這類問題,nginx能夠經過設置daemon off;或者去除掉KeepAlive設置來解決。
launchctl load ~/Library/LaunchAgents/org.openresty.plist
這條命令會直接啓動 openresty ,下次系統重啓的時候,也會自動啓動。
既然是本身用,那麼使用 8080 老是讓人很不爽。要使用 80 端口,也很簡單。
首先,將 ~/Library/LaunchAgents/org.openresty.plist 複製到/Library/LaunchDaemons/org.openresty.plist :
cp ~/Library/LaunchAgents/org.openresty.plist /Library/LaunchDaemons/org.openresty.plist
/Library/LaunchDaemons 是給管理員使用的,在用戶登陸前生效,以 root 身份執行任務。
爲何不復制到 /Library/LaunchAgent 中呢?由於 Wayne 在 launchctl筆記 中提到:
LaunchAgents下的plist都會以當前登陸用戶的身份load進來……
而後,移除當前的監聽:
launchctl unload ~/Library/LaunchAgents/org.openresty.plist rm ~/Library/LaunchAgents/org.openresty.plist
最後,用 sudo 調用 launchctl:
sudo launchctl load /Library/LaunchDaemons/org.openresty.plist
固然,記得要把 nginx 配置文件中的監聽端口改爲 80 。
在開發過程當中,常常須要重啓 nginx 進程。在個人電腦上,有兩個 nginx 進程,一個負責正常的 HTTP 服務;一個負責測試 OpenResty 功能。
我寫了一個腳本 openresty 用於快速操做 nginx 進程。
#!/bin/bash sign=${1:-reload} prefix=${2:-1} if [ "$prefix" = 1 ]; then prefix='/usr/local/etc/openresty' else prefix="$hhl/server" fi echo "nginx -s $sign -p $prefix" nginx -s "$sign" -p "$prefix"
在實際使用中,我只須要這樣調用就好了:
#!/bin/bash openresty reload 1 openresty reopen 2