话机全部 No Service 怎么办?

故障现象

有客户遇到了这样的问题,一大早上班所有分机全部显示 No Service。他们在全国的上海,北京,苏州各地话机都是这样,不只是一个地方的问题。话机显示如下:

我们到系统里一看,发现是 SIP 服务没起来,挂掉了。把 SIP 服务启动以后问题就解决了。话机都注册上了。

排查故障

但是问题不是无缘无故发生的,为什么 SIP 服务会 down 掉呢?抱着好奇心我们打开了 3CX 管理控制台 – 活动日志 – 日志 – Linux Syslog ,将 daemon.log 文件下载下来观察。

如上图所示,原来是 8:43 分的时候 3CXPhoneSytem01.service 服务停止了,失败原因是 ‘signal’,而 9:05 分的记录就是我们启动 SIP 服务的行为。

现在我们知道了是因为 3CXPhoneSystem01.service 服务停止导致的 SIP 服务停止,从而导致所有分机注册不上。

那么这里又产生了一个新的问题,为什么 3CXPhoneSystem01.service 会停止。我们带着疑问询问了 3CX 官方技术人员,他给我们的解释如下:

3cx said it was a known bug, this issue has not actually been fixed as of yet.​the temporary fix 3cx suggested was to use systemd to automatically restart the sip service upon a crash.

就是说这是 3CX 说这是一个已知的 bug,这个 bug 还没修复。后面他们说可以使用 systemd 在服务崩溃时重启服务暂时解决这个问题。

我们也咨询了其他的 partner,他们也遇到过类似的问题。不过他们客户的 3CX 崩溃的是 Media 服务。如果有客户遇到类似的问题也可以根据下面的方式解决。

解决办法

3CX 给我们的回复中告诉了我们一个临时解决的办法,就是用 systemd 来让崩溃的服务重新启动。

首先我们使用 SSH 以 root 身份登录到 3CX 服务器上。

vim /etc/systemd/system/3CXPhoneSystem01.service

在 [Service] 标题下添加以下两行:

Restart=alwaysRestartSec=3
RestartSec=3

输入 :wq 保存文件。

接着输入下面两条命令重载并重启服务:

systemctl daemon-reload
systemctl restart 3CXPhoneSystem01

这样如果服务下次再崩溃就会自动重启了。接下来静待 3CX 修复这个 bug 就可以了!