前情提要:在 macOS 的啟動守護行程一文中介紹了 macOS 的守護行程 (Daemon) 以及任務項 (Agent),在 Homebrew 簡介一文中,介紹了如何使用 Homebrew 安裝套件。
本文將以 Apache HTTP Server 為例,介紹如何將安裝好的套件設定為守護行程或是任務項。
將 httpd 設定為 Daemon
要讓 httpd 能夠在開機自動執行,可以執行下列的指令:
sudo brew services start httpd
上面的指令包含了下面的動作:
1. 自動安裝 homebrew-services(用來整合 Homebrew 跟 macOS 的 launchctl 管理器)。
2. 將 httpd 的 plist 檔案(homebrew.mxcl.httpd.plist)複製到 /Library/LaunchDaemons (加入到 Launchd) :
sudo cp /usr/local/opt/httpd/homebrew.mxcl.httpd.plist /Library/LaunchDaemons
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
sudo chmod 644 /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
sudo chmod 644 /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
3. 將下列的檔案夾或是檔案的擁有者更改為 root:
/usr/local/opt/httpd
/usr/local/opt/httpd/bin
/usr/local/opt/httpd/bin/httpd
/usr/local/var/homebrew/linked/httpd
/usr/local/opt/httpd/bin
/usr/local/opt/httpd/bin/httpd
/usr/local/var/homebrew/linked/httpd
注意:我們在執行 Homebrew 時,使用的是目前登入的使用者權限,因此在升級、移除或是重新安裝 httpd 時,要使用 'sudo rm' 指令手動移除 httpd 舊版本的 Keg 檔案夾。直接使用 brew uninstall httpd 會出現下列的錯誤:
Error: Could not remove httpd keg! Do so manually: sudo rm -rf /usr/local/Cellar/httpd/2.4.41_1
4. 執行 sudo launchctl load 將 httpd 加入 launchd:
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.httpd.plist
在使用 Homebrew 安裝軟體時,plist 檔案預設會安裝在 Keg 檔案夾中,若要讓服務在開機時使用 root 權限自動執行 (成為守護行程),就要使用上述的 brew services 指令進行設定,或是以手動的方式執行上面的步驟 2、3、以及 4。
我們可以使用 launchctl list 指令檢查 httpd 是否已經被加入 launchd 中:
sudo launchctl list | grep httpd
將 httpd 從 Launchd 中移除或是重新加入
要將 httpd 從 Launchd 中移除,可以執行下列的指令:
sudo brew services stop httpd
在修改過 plist 檔案,或是要重新加入 Launchd,可以使用下列的指令:
sudo brew services restart httpd
將 httpd 設定為 Agent
要讓 httpd 能夠在登入後自動執行,可以執行下列的指令:
brew services start httpd
上面的指令包含了下面的動作:
1. 自動安裝 homebrew-services(如果之前沒有安裝過的話)。
2. 將 Keg 檔案夾中的 plist 檔案複製到 ~/Library/LaunchAgents:
cp /usr/local/opt/httpd/homebrew.mxcl.httpd.plist ~/Library/LaunchAgents
3. 執行 launchctl load,啟動 httpd:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist
注意:使用 brew services 讓服務 (例如本文中的 httpd) 成為 Daemon 或是 Agent,主要的差異在於是否使用 sudo 指令。
將 httpd 從守護行程中移除或是重新加入
安裝 Homebrew-services 後,也可以使用它將 httpd 從任務項中移除:
brew services stop httpd
或是重新加入任務項 (在修改 homebrew.mxcl.httpd.plist 之後):
sudo brew services restart httpd
僅啟動 httpd
Homebrew-services 也可以只用來啟動 httpd:
brew services run httpd
列出可以被管理的服務
使用下列的指令可以列出所有可以被 brew services 管理的套件:
brew services list
或是簡單的使用:
brew services
如果先前執行過:
brew services start httpd
會輸出下列的資訊:
Name Status User Plist httpd started userName /Users/userName/Library/LaunchAgents/homebrew.mxcl.httpd.plist php stopped redis stopped
顯示目前 httpd 是登入啟動的任務項 (plist 檔在 ~/Library/LaunchAgents/)。
如果使用 sudo 執行:
sudo brew services start httpd
再一次執行 brew services 則會列出:
Name Status User Plist httpd started root /Library/LaunchDaemons/homebrew.mxcl.httpd.plist php stopped redis stopped
顯示目前 httpd 是守護行程 (plist 檔在 /Library/LaunchDaemons/)。
注意:當把 httpd 設定為守護行程後,雖然在執行 sudo brew services stop httpd 後,會將 httpd 的 plist 檔從 /Library/LaunchDaemons/ 中移除,httpd 的 plist 檔仍然存在於 ~/Library/LaunchAgents/ 中。
提醒:因為 Mac 大部份是用來做為開發用,因此建議將服務設為任務項,在登入時啟動即可。
沒有留言:
張貼留言