[TOC]
### 如何擴展自定義服務?
- 將自定義服務已服務名稱為單位保存到`.\WAMP\server`目錄
- 在`.\WAMP\server\{服務名稱}`目錄下創建并配置`.\WAMP\server\{服務名稱}\server.ini`
- 如需要可創建模板文件`目標文件.tpl`,實現對服務的動態配置
> 建議多多參考已有服務及相關文件
* * * * *
### 服務配置是什么?
服務配置文件是向程序中注冊定義服務的配置文件
例如`.\WAMP\server\apache-2.4.29\server.ini`:
```
; 服務配置文件
; 系統在編譯模板前會自動映射所有配置數據為“server.服務名.節名.項名.項值”腳本變量
; 系統在編譯模板前會自動補充“server.服務名.server.dir.服務目錄”腳本變量
;
; 配置數據說明:
; server節點;為系統預定義節點,該節點中也保存著系統預定義項
;[server]
; 服務運行命令行;支持相對當前目錄路徑
;cmd=
; 是否禁用服務;僅在有運行命令(cmd)時有效,可選值 0 和 1 缺省為0
;disable=0
; 服務備注信息
;notes=
;
[server]
cmd=.\bin\httpd.exe
disable=0
notes=該服務運行狀態,站點操作需重啟
```
> 其中內容會被映射為Lua全局變量,以供模板文件方便獲取。
* * * * *
### 配置模板是什么?
為了實現對服務進行統一動態配置,內部基于Lua實現了一個簡易的模板引擎。可在各服務目錄下,創建后綴為`.tpl`文件并在其中嵌入`<?lua LUA代碼段>`。在每次啟動服務前程序會檢索各服務目錄下模板文件``,并將其編譯為目標文件``。
```
.\WAMP\server\{服務名稱}\{子目錄}\{名稱.后綴}.tpl -> .\WAMP\server\{服務名稱}\{子目錄}\{名稱.后綴}
```
例如`.\WAMP\server\mysql-5.7.21\my.ini.tpl` 的一段:
```
# mysqld為服務端參數
[mysqld]
# 設置錯誤日志
log-error="<?lua echo(toPath(".") .. "/error.log") ?>"
# MySQL的安裝路徑
basedir="<?lua echo(toPath(".")) ?>"
# MySQL數據文件的存儲位置,也是數據庫表的存放位置。
datadir="<?lua echo(toPath(server[serverName].mysql.datadir)) ?>"
# 數據庫的端口
port=3306
```
> 建議多多參考已有服務下模板文件和[Lua輔助函數](620892)。