如何在 FreePBX 中从拨号计划重启 Asterisk

在我们之前的文章如何在 FreePBX 中为自定义分机添加呼叫操作中,我们展示了如何获取。此外,在我们关于如何在 FreePBX 中重启 Asterisk的文章中,我们探讨了重启 Asterisk 的三种不同选项,例如 core restart gracefully

在这篇文章中,我们将添加一个拨号计划分机(即你可以拨打的号码)来重启 Asterisk。这不会重启 FreePBX,而是完全重启(而不仅仅是重新加载)Asterisk 本身,例如加载任何新的配置选项并重新初始化所有 SIP 中继。在这种情况下,我们使用 core restart gracefully,即我们将等待任何当前活动的呼叫完成,但不接受新呼叫。

将此块添加到 /etc/asterisk/extensions_custom.conf(参见如何在 FreePBX 中为自定义分机添加呼叫操作):

extensions_custom_restart.conf
[from-internal-additional-custom]
exten => 999999,1,Answer()
exten => 999999,n,Wait(0.5)
exten => 999999,n,SayAlpha(OK)
exten => 999999,n,System(bash -c "sleep 1 && asterisk -rx 'core restart gracefully'" &)
exten => 999999,n,Hangup()

重新加载 Asterisk,现在你可以拨打 999999 来重启 Asterisk

工作原理

基本上,我们向用户读取 OK,然后运行

extensions_custom_restart_command.conf
System(bash -c "sleep 1 && asterisk -rx 'core restart gracefully'" &)

基本上,你可能认为我们只需运行

extensions_custom_restart_simple.conf
System(asterisk -rx 'core restart gracefully')

然而,这会失败(或至少延迟重启约一分钟),因为发起重启的呼叫仍在进行中。此外,我们不能在 Hangup() 之后运行 System(),因为 Hangup() 会终止拨号计划,因此 System() 永远不会运行。因此,我们在后台(命令末尾的 &)以延迟(sleep 1)运行它,使 Asterisk 先干净地挂断呼叫,然后命令才会运行。

注意末尾的后台 & 绝对必要,省略它会导致 Asterisk 只等待 sleep 1 && asterisk ... 命令完成,而不会在中间 Hangup()

使用 bash -c 运行命令只是一种变通方法,这样我们就可以将 sleep 1 && asterisk ... 的多个链式命令塞入一个命令中,我们可以使用末尾的 & 在后台运行它。


Check out similar posts by category: FreePBX