命令行參數(shù)
一般來(lái)說(shuō),F(xiàn)reeSWITCH 不需要任何命令行參數(shù)就可以啟動(dòng),但在某些情況下,你需要以一些特殊的參數(shù)啟動(dòng)。在此,僅作簡(jiǎn)單介紹。如果你知道是什么意思,那么你就可以使用,如果不知道,多半你用不到。
使用 freeswitch -help 或 freeswitch --help 會(huì)顯示以下信息:
-nf -- no forking
-u [user] -- 啟動(dòng)后以非 root 用戶 user 身份運(yùn)行
-g [group] -- 啟動(dòng)后以非 root 組 group 身份運(yùn)行
-help -- 顯示本幫助信息
-version -- 顯示版本信息
-waste -- 允許浪費(fèi)內(nèi)存,F(xiàn)reeSWITCH 僅需 240K 的?臻g
你可以使用 ulimit -s 240 限制棧空間使用,或使用該選擇忽略警告信息
-core -- 出錯(cuò)時(shí)進(jìn)行內(nèi)核轉(zhuǎn)儲(chǔ)
-hp -- 以高優(yōu)先級(jí)運(yùn)行
-vg -- 在 valgrind 下運(yùn)行,調(diào)試內(nèi)存泄露時(shí)使用
-nosql -- 不使用 SQL,show channels 類的命令將不能顯示結(jié)果
-heavy-timer -- 更精確的時(shí)鐘?赡軙(huì)更精確,但對(duì)系統(tǒng)要求更高
-nonat -- 如果路由器支持 uPnP 或 NAT-PMP,則 FreeSWITCH
可以自動(dòng)解決 NAT 穿越問(wèn)題。如果路由器不支持,則該選項(xiàng)可以使啟動(dòng)更快
-nocal -- 關(guān)閉時(shí)鐘核準(zhǔn)。FreeSWTICH 理想的運(yùn)行環(huán)境是 1000 Hz 的內(nèi)核時(shí)鐘
如果你的內(nèi)核時(shí)鐘小于 1000 Hz 或在虛擬機(jī)上,可以嘗試關(guān)閉該選項(xiàng)
-nort -- 關(guān)閉實(shí)時(shí)時(shí)鐘
-stop -- 關(guān)閉 FreeSWTICH,它會(huì)在 run 目錄中查找 PID文件
-nc -- 啟動(dòng)到后臺(tái)模式,沒(méi)有控制臺(tái)
-c -- 啟動(dòng)到控制臺(tái),默認(rèn)
-conf [confdir] -- 指定其它的配置文件所在目錄,須與 -log、 -db 合用
-log [logdir] -- 指定其它的日志目錄
-run [rundir] -- 指定其它存放 PID 文件的運(yùn)行目錄
-db [dbdir] -- 指定其它數(shù)據(jù)庫(kù)目錄
-mod [moddir] -- 指定其它模塊目錄
-htdocs [htdocsdir] -- 指定其它 HTTP 根目錄
-scripts [scriptsdir] -- 指定其它腳本目錄
系統(tǒng)啟動(dòng)腳本
在學(xué)習(xí)調(diào)試階段,你可以啟動(dòng)到前臺(tái),而系統(tǒng)真正運(yùn)行時(shí),你可以使用 -nc 參數(shù)啟動(dòng)到后臺(tái),然后通過(guò)查看 log/freeswitch.log 跟蹤系統(tǒng)運(yùn)行情況(你可以用 tail -f 命令實(shí)時(shí)跟蹤,我一般使用 less)。
一般情況下,啟動(dòng)到前臺(tái)更容易調(diào)試,但你又不想在每次關(guān)閉 Terminal 時(shí)停止 FreeSWITCH,那么,你可以借助 screen 來(lái)實(shí)現(xiàn)。
在真正的生產(chǎn)系統(tǒng)上,你需要它能跟系統(tǒng)一起啟動(dòng)。在 *nix 系統(tǒng)上,啟動(dòng)腳本一般放在 /etc/init.d/。你可以在系統(tǒng)源代碼目錄下找到不同系統(tǒng)啟動(dòng)腳本 debian/freeswitch.init 及 build/freeswitch.init.*,參考使用。在 Windows 上,你也可以注冊(cè)為 Windows 服務(wù),參見(jiàn)附錄中的 FAQ。
控制臺(tái)與命令客戶端
系統(tǒng)不帶參數(shù)會(huì)啟動(dòng)到控制臺(tái),在控制臺(tái)上你可以輸入各種命令以控制或查詢 FreeSWITCH 的狀態(tài)。試試輸入以下命令:
version -- 顯示當(dāng)前版本
status -- 顯示當(dāng)前狀態(tài)
sofia status -- 顯示 sofia 狀態(tài)
help -- 顯示幫助
為了調(diào)試方便,F(xiàn)reeSWITCH 還在 conf/autoload_configs/switch.conf.xml 中定義了一些控制臺(tái)快捷鍵。你可以通過(guò)F1-F12來(lái)使用它們(不過(guò),在某些操作系統(tǒng)上,有些快捷鍵可能與操作系統(tǒng)的相沖突,那你就只直接輸入這些命令或重新定義他們了)。
<cli-keybindings>
<key name="1" value="help"/>
<key name="2" value="status"/>
<key name="3" value="show channels"/>
<key name="4" value="show calls"/>
<key name="5" value="sofia status"/>
<key name="6" value="reloadxml"/>
<key name="7" value="console loglevel 0"/>
<key name="8" value="console loglevel 7"/>
<key name="9" value="sofia status profile internal"/>
<key name="10" value="sofia profile internal siptrace on"/>
<key name="11" value="sofia profile internal siptrace off"/>
<key name="12" value="version"/>
</cli-keybindings>
FreeSWITCH 是 Client-Server結(jié)構(gòu),不管 FreeSWITCH 運(yùn)行在前臺(tái)還是后臺(tái),你都可以使用客戶端軟件 fs_cli 連接 FreeSWITCH.
fs_cli 是一個(gè)類似 Telnet 的客戶端(也類似于 Asterisk 中的 asterisk -r命令),它使用 FreeSWITCH 的 ESL(Event Socket Library)庫(kù)與 FreeSWITCH 通信。當(dāng)然,需要加載模塊 mod_event_socket。該模塊是默認(rèn)加載的。
正常情況下,直接輸入 bin/fs_cli 即可連接上,并出現(xiàn)系統(tǒng)提示符。如果出現(xiàn):
[ERROR] libs/esl/fs_cli.c:652 main() Error Connecting [Socket Connection Error]
這樣的錯(cuò)誤,說(shuō)明 FreeSWITCH 沒(méi)有啟動(dòng)或 mod_event_socket 沒(méi)有正確加載,請(qǐng)檢查T(mén)CP端口8021端口是否處于監(jiān)聽(tīng)狀態(tài)或被其它進(jìn)程占用。
fs_cli 也支持很多命令行參數(shù),值得一提的是 -x 參數(shù),它允許執(zhí)行一條命令后退出,這在編寫(xiě)腳本程序時(shí)非常有用(如果它能支持管道會(huì)更有用,但是它不支持):
bin/fs\_cli -x "version"
bin/fs\_cli -x "status"
其它的參數(shù)都可以通過(guò)配置文件來(lái)實(shí)現(xiàn),在這里就不多說(shuō)了?梢詤⒁(jiàn):http://wiki.freeswitch.org/wiki/Fs_cli
使用fs_cli,不僅可以連接到本機(jī)的 FreeSWITCH,也可以連接到其它機(jī)器的 FreeSWITCH 上(或本機(jī)另外的 FreeSWITCH 實(shí)例上),通過(guò)在用戶主目錄下編輯配置文件 .fs_cli_conf(注意前面的點(diǎn)“.”),可以定義要連接的多個(gè)機(jī)器:
[server1]
host => 192.168.1.10
port => 8021
password => secret_password
debug => 7
[server2]
host => 192.168.1.11
port => 8021
password => someother_password
debug => 0
注意:如果要連接到其它機(jī)器,要確保 FreeSWITCH 的 Event Socket 是監(jiān)聽(tīng)在真實(shí)網(wǎng)卡的 IP 地址上,而不是127.0.0.1。另外,在UNIX中,以點(diǎn)開(kāi)頭的文件是隱藏文件,普通的 ls 命令是不能列出它的,可以使用 ls -a。
一旦配置好,就可以這樣使用它:
bin/fs_cli server1
bin/fs_cli server2
在 fs_cli 中,有幾個(gè)特殊的命令,它們是以 “/” 開(kāi)頭的,這些命令并不直接發(fā)送到 FreeSWITCH,而是先由 fs_cli 處理。/quit、/bye、/exit、Ctrl + D 都可以退出 fs_cli;/help是幫助。