分类: C/C++
2014-11-19 19:59:52
-nf -- no forking -u [user] -- 启动后以非 root 用户 user 身份运行 -g [group] -- 启动后以非 root 组 group 身份运行 -help -- 显示本帮助信息 -version -- 显示版本信息 -waste -- 允许浪费内存,FreeSWITCH 仅需 240K 的栈空间 你可以使用 ulimit -s 240 限制栈空间使用,或使用该选择忽略警告信息 -core -- 出错时进行内核转储 -hp -- 以高优先级运行 -vg -- 在 valgrind 下运行,调试内存泄露时使用 -nosql -- 不使用 SQL,show channels 类的命令将不能显示结果 -heavy-timer -- 更精确的时钟。可能会更精确,但对系统要求更高 -nonat -- 如果路由器支持 uPnP 或 NAT-PMP,则 FreeSWITCH 可以自动解决 NAT 穿越问题。如果路由器不支持,则该选项可以使启动更快 -nocal -- 关闭时钟核准。FreeSWTICH 理想的运行环境是 1000 Hz 的内核时钟 如果你的内核时钟小于 1000 Hz 或在虚拟机上,可以尝试关闭该选项 -nort -- 关闭实时时钟 -stop -- 关闭 FreeSWTICH,它会在 run 目录中查找 PID文件
-nc -- 启动到后台模式,没有控制台
-c -- 启动到控制台,默认 -conf [confdir] -- 指定其它的配置文件所在目录,须与 -log、 -db 合用 -log [logdir] -- 指定其它的日志目录 -run [rundir] -- 指定其它存放 PID 文件的运行目录 -db [dbdir] -- 指定其它数据库目录 -mod [moddir] -- 指定其它模块目录 -htdocs [htdocsdir] -- 指定其它 HTTP 根目录 -scripts [scriptsdir] -- 指定其它脚本目录
红色标出了最重要的参数,启动到后台的freeswitch我们怎么用命令去控制呢?这就需要刚才提到的fs_cli,运行此命令可以连接到本机的freeswitch,如果加上参数也可以连接远程freeswitch
fs_cli 是一个类似 Telnet 的客户端(也类似于 Asterisk 中的 asterisk -r命令),它使用 FreeSWITCH 的 ESL(Event Socket Library)库与 FreeSWITCH 通信。当然,需要加载模块 mod_event_socket。该模块是默认加载的。
正常情况下,直接输入 bin/fs_cli 即可连接上,并出现系统提示符。如果出现:
[ERROR] libs/esl/fs_cli.c:652 main() Error Connecting [Socket Connection Error]这样的错误,说明 FreeSWITCH 没有启动或 mod_event_socket 没有正确加载,请检查TCP端口8021端口是否处于监听状态或被其它进程占用。
fs_cli 也支持很多命令行参数,值得一提的是 -x 参数,它允许执行一条命令后退出,这在编写脚本程序时非常有用(如果它能支持管道会更有用,但是它不支持):
bin/fs/_cli -x "version" bin/fs/_cli -x "status"其它的参数都可以通过配置文件来实现,在这里就不多说了。可以参见:
使用fs_cli,不仅可以连接到本机的 FreeSWITCH,也可以连接到其它机器的 FreeSWITCH 上(或本机另外的 FreeSWITCH 实例上),通过在用户主目录下编辑配置文件.fs_cli_conf(注意前面的点“.”),可以定义要连接的多个机器:
[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注意:如果要连接到其它机器,要确保 FreeSWITCH 的 Event Socket 是监听在真实网卡的 IP 地址上,而不是127.0.0.1。另外,在UNIX中,以点开头的文件是隐藏文件,普通的ls 命令是不能列出它的,可以使用 ls -a。
一旦配置好,就可以这样使用它:
bin/fs_cli server1 bin/fs_cli server2在 fs_cli 中,以 “/” 开头的命令并不直接发送到 FreeSWITCH,而是先由 fs_cli 处理。
/quit、/bye、/exit、Ctrl + D 都可以退出 fs_cli;/help是帮助。
其它一些 “/”开头的指令与 Event Socket 中相关的命令相同,如:
/event -- 开启事件接收 /noevents -- 关闭事件接收 /nixevent -- 除了特定一种外,开启所有事件 /log -- 设置 log 级别,如 /log info 或 /log debug 等 /nolog -- 关闭 log /filter -- 过滤事件另外,一些“重要”命令不能直接在 fs_cli 中执行,如 shutdown 命令,在控制台上可以直接执行,但在 fs_cli中,需要执行 fsctl shutdown。
除此之外,其它命令都与直接在 FreeSWITCH 控制台上执行是一样的。它也支持快捷键,最常用的快捷键是 F6(reloadxml)、F7(关闭 log输出)、F8(开启 debug 级别的 log 输出)。
在 *nix上,两者都通过 libeditline 支持。可以通过上、下箭头查看命令历史。
对于发给freeswitch的命令,有几个应该熟记于心,
Help- FSAPI列表
version—正运行的服务器版本
status—统计当前FreeSWITCH状态信息
showchannels—显示所有活动的channell(call-leg)
show calls—显示所有当前被bridge的呼叫
对于呼叫,有几个概念,即 channel, call-leg, call; channel等同于call-leg,从服务器角度看,
Call-leg或者channle是服务器与客户端之间的单独连接实例,call为两个终端被bridge在一起,是两个call-leg. 比如呼叫进入freeswitch,被路由到留言,这是一条call-leg,如果被freeswitch桥接到另一个客户端,则为两个call-leg,by the way, freeswitch对于每个call-leg(freeswitch中也叫session)被单独线程处理。
在学习调试阶段,你可以启动到前台,而系统真正运行时,你可以使用 -nc 参数启动到后台,然后通过查看 log/freeswitch.log 跟踪系统运行情况(你可以用 tail -f 命令实时跟踪,我一般使用 less)。
一般情况下,启动到前台更容易调试,但你又不想在每次关闭 Terminal 时停止 FreeSWITCH,那么,你可以借助 来实现。
在真正的生产系统上,你需要它能跟系统一起启动。在 *nix 系统上,启动脚本一般放在 /etc/init.d/。你可以在系统源代码目录下找到不同系统启动脚本 debian/freeswitch.init 及 build/freeswitch.init.*,参考使用。