背景介绍
exec
和evrexec
模块比较简单,所以就放在一章介绍。
- exec 模块:用于执行外部命令。
- evrexec 模块:用于执行
event_route
事件,比如:进程启动,收到RPC命令或者从udp端口收到数据。
官方文档地址:
本次测试的kamailio版本是:
version: kamailio 5.8.5 (x86_64/linux)
exec模块
参数解析
|
|
重要函数
exec_dset(command)
执行外部命令,并返回执行结果。当前的URI
作为参数传递,返回的是设置后的URI
.
只能用在: REQUEST_ROUTE, FAILURE_ROUTE
exec_msg(command)
执行外部命令,整个message作为参数传递,没有其他命令行参数添加.
只能用在: REQUEST_ROUTE, FAILURE_ROUTE
exec_avp(command [, avplist])
执行外部命令,每个输出结果存储在avplist中.
只能用在: REQUEST_ROUTE, FAILURE_ROUTE
exec_cmd(command)
执行外部命令,轻量版本,不传递SIP消息做参数,也不设置环境变量,也不使用输出的命令.
可以用在: ANY ROUTE
实战
- 配置文件:
|
|
-
输出结果:
syslog日志:
1 2
3(1728) ERROR: |25-05-19 11:40:08|a2615f4bd775445386f2123bc458b299| exec [exec.c:190]: exec_str(): no uri from echo TEST > /tmp/test.txt 'sip:172.16.4.111:5460' 3(1728) INFO: |25-05-19 11:40:08|a2615f4bd775445386f2123bc458b299| <script>: ---172.16.80.13---1004---1--
tmp下的文件:
1 2 3 4 5 6
[root@localhost tmp]# cat abc.txt abc [root@localhost tmp]# cat 1004.txt test222 [root@localhost tmp]# cat test.txt TEST sip:172.16.4.111:5460
可以看到,
exec_cmd
和exec_msg
都成功了,exec_dset
有错误日志,但是脚本执行成功了。
evrexec模块
参数解析
|
|
实战
- 配置文件:
|
|
-
输出结果:
syslog日志:
1 2 3
37(2902) INFO: jsonrpcs [jsonrpcs_sock.c:471]: jsonrpc_dgram_process(): a new child 0/2902 39(2904) INFO: ctl [io_listener.c:215]: io_listen_loop(): using epoll_lt io watch method (config) 45(2910) INFO: <script>: evrexectimer run....
evrexec:timer
: 还是比较有用的,可以执行服务启动时就运行脚本的功能。evrexec:udp
: 可以监听udp端口,但是不能是listen
的端口,要使用未监听的端口。
evrexec的参数有:
- $evr(data): udp端口收到的数据
- $evr(srcip): udp源ip
- $evr(srcport): udp源端口的字符串值
- $evr(srcportno): udp源端口整形值