當你從原始碼編譯安裝 Apache(httpd)而非使用套件管理器(如 yum、apt)時,系統的 systemd 或 SysV init 並不知曉該服務的存在。執行 service httpd restart 會提示「httpd:未被識別的服務」,此時必須手動建立啟動腳本並註冊為系統服務。
在註冊服務前,可直接呼叫 Apache 控制腳本啟動:
# /usr/local/apache2/bin/apachectl start
註:路徑視實際安裝前綴而定,請替換為你的實際路徑。
# touch /etc/init.d/httpd
# chmod 755 /etc/init.d/httpd
vi /etc/init.d/httpd 寫入以下內容)
#!/bin/bash
#
# chkconfig: 2345 85 85
# description: httpd is a web server
# processname: httpd
# 載入系統函式庫
. /etc/init.d/functions
RETVAL=0
start() {
echo -n $"Starting httpd service: "
daemon /usr/local/apache2/bin/apachectl start
RETVAL=$?
echo
}
stop() {
echo -n $"Shutting down httpd service: "
daemon /usr/local/apache2/bin/apachectl stop
RETVAL=$?
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $RETVAL
關鍵點:
chkconfig: 2345 85 85 定義運行級別 2/3/4/5 啟動,啟動優先級 85,關閉優先級 85。daemon 後的路徑必須指向你實際的 apachectl。$"..." 語法支援多語系訊息,若系統報錯可改為普通雙引號。# chkconfig --add httpd
# chkconfig httpd on
# chkconfig --list httpd # 應顯示 2345:on
# service httpd start # 測試啟動
# service httpd status # 檢查狀態
若系統使用 systemd,建議改寫 /etc/systemd/system/httpd.service:
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl graceful
ExecStop=/usr/local/apache2/bin/apachectl stop
PrivateTmp=true
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
然後執行:
# systemctl daemon-reload
# systemctl enable httpd
# systemctl start httpd
apachectl 路徑必須絕對正確。755 執行權限。export LD_LIBRARY_PATH=...。firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload。手動編譯安裝雖靈活,但失去了套件管理器的服務整合。通過建立標準啟動腳本(SysV 或 systemd),即可讓自編譯的 Apache 享受原生服務管理體驗,實現開機自啟、統一控制與狀態監控。