Странное поведение сервиса webcallserver

pantera

New Member
Стойкое ощущение что сервиса webcallserver пытается запустится дважды.

Если смотреть "systemctl status webcallserver":
webcallserver.service - Flashphoner WebCallServer
Loaded: loaded (/etc/systemd/system/webcallserver.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Вт 2022-08-16 09:17:54 +05; 423ms ago
Process: 26800 ExecStart=/bin/bash webcallserver start (code=exited, status=1/FAILURE)
Main PID: 26800 (code=exited, status=1/FAILURE)
авг 16 09:17:54 wcs.svptk.ru bash[26800]: at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap$HostAwareSocketFactory.createServerSocket(ConnectorBootstrap.java:894)
авг 16 09:17:54 wcs.svptk.ru bash[26800]: at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
авг 16 09:17:54 wcs.svptk.ru bash[26800]: at java.rmi/sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:324)
авг 16 09:17:54 wcs.svptk.ru bash[26800]: ... 11 more
авг 16 09:17:54 wcs.svptk.ru bash[26800]: ERROR: FlashphonerWebCallServer can't start due to incorrect java options
авг 16 09:17:54 wcs.svptk.ru sudo[27396]: root : TTY=unknown ; PWD=/usr/local/FlashphonerWebCallServer-5.2.1345/bin ; USER=flashphoner ; COMMAND=/bin/echo -e [2022-08-16 09:17:54] ERROR checkJavaOptions - FlashphonerWebCallServer can't start due to incorrect java options
авг 16 09:17:54 wcs.svptk.ru bash[26800]: [23B blob data]
авг 16 09:17:54 wcs.svptk.ru systemd[1]: webcallserver.service: main process exited, code=exited, status=1/FAILURE
авг 16 09:17:54 wcs.svptk.ru systemd[1]: Unit webcallserver.service entered failed state.
авг 16 09:17:54 wcs.svptk.ru systemd[1]: webcallserver.service failed.

Периодически сервис запускается, но останавливается по той же причине.
По логу startup.log видно, что ругается на невозможность использовать порт 50999.

2022-08-16 09:17:44] ERROR checkJavaOptions - FlashphonerWebCallServer can't start due to incorrect java options
[2022-08-16 09:17:53] INFO checkJavaOptions - Checking JVM options
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 50999; nested exception is:
java.net.BindException: Адрес уже используется (Bind failed)

А если посмотреть открытые порты (lsof -i -P -n), сервис прекрасно работает как и все входящие на него соединения:
java 2315 flashphoner 77u IPv4 31064 0t0 TCP 127.0.0.1:35865 (LISTEN)
java 2315 flashphoner 78u IPv4 31065 0t0 TCP 127.0.0.1:50999 (LISTEN)
java 2315 flashphoner 79u IPv4 31066 0t0 TCP *:43334 (LISTEN)
java 2315 flashphoner 81u IPv4 15278 0t0 TCP *:8082 (LISTEN)
java 2315 flashphoner 99u IPv4 31963 0t0 TCP *:1098 (LISTEN)
java 2315 flashphoner 100u IPv4 15280 0t0 TCP *:8445 (LISTEN)
java 2315 flashphoner 101u IPv4 31964 0t0 TCP *:8081 (LISTEN)
java 2315 flashphoner 105u IPv4 31966 0t0 TCP *:9091 (LISTEN)
java 2315 flashphoner 109u IPv4 31968 0t0 TCP *:7004 (LISTEN)
java 2315 flashphoner 113u IPv4 31970 0t0 TCP *:8888 (LISTEN)
java 2315 flashphoner 117u IPv4 31977 0t0 TCP *:8446 (LISTEN)
java 2315 flashphoner 123u IPv4 31975 0t0 TCP *:8086 (LISTEN)
java 2315 flashphoner 130u IPv4 30216 0t0 TCP *:1935 (LISTEN)
java 2315 flashphoner 134u IPv4 31979 0t0 UDP *:1935
java 2315 flashphoner 138u IPv4 31981 0t0 TCP *:7002 (LISTEN)
java 2315 flashphoner 142u IPv4 31983 0t0 TCP *:7001 (LISTEN)

Собственно вопрос, в чем может быть проблема?
 

Max

Administrator
Staff member
Добрый день.
Выглядит так, что один экземпляр java процесса уже запущен. Пожалуйста, остановите WCS командой
Code:
systemctl stop webcallserver
После этого убедитесь, что процесс остановлен:
Code:
pgrep -afn com.flashphoner.server.Server
Если есть активные проwtccs сервера, остановите их
Code:
pkill -afn com.flashphoner.server.Server
После этого проверьте, что порт 50999 не занят
Code:
netstat -nlp | grep 50999
Возможно, на инстансе запущен еще какой-то сервис, использующий этот же порт. В этом случае Вы можете переназначить порт либо в настройках этого процесса, либо, если это невозможно, в настройках WCS (файл wcs-core.properties), например:
Code:
-Dcom.sun.management.jmxremote.port=51000
Если ничего не помогает, предоставьте, пожалуйста, SSH доступ к серверу, используя эту форму.
 
Last edited:

Max

Administrator
Staff member
Мы проверили Ваш сервер. Проблема в скрипте, который запускается по cron
1660630335940.png

1660630431848.png

Выглядит так: если остановить сервис командой
Code:
systemctl stop webcallserver
или рестартовать его
Code:
systemctl restart webcallserver
данный скрипт успевает отработать, когда сервис еще не перешел в состояние active, и стартует WCS еще раз. Поскольку java машина к этому моменту уже поднялась, она держит порты, второй экземпляр не может стартовать и дает ошибку. Причем и остановить уже запущенный экземпляр можно только по
Code:
kill `pidof java`
т.к. повторный запуск сносит файлы-флаги в каталоге /usr/local/FlashphonerWebCallServer/bin, в частности файл, который хранит PID запущенного процесса.
Рекомендуем рефакторинг скрипта. Для проверки состояния WCS рекомендуем использовать специальный эндпойнт
Code:
http://localhost:8081/health-check
Подробнее здесь: Проверка работоспособности сервера
 

pantera

New Member
Из крона скрипт убрали, но появился другой вопрос:
[2022-08-16 11:33:09] INFO startWithSudo - Starting FlashphonerWebCallServer as user flashphoner
[2022-08-16 11:33:12] INFO waitForHealth - Will wait for server response at least 10 seconds
[2022-08-16 11:33:12] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:13] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:14] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:15] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:16] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:18] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:19] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:20] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:21] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:22] INFO isServerHealthy - Server health check response code:
[2022-08-16 11:33:23] ERROR start - FlashphonerWebCallServer started, but is not healthy, please try to restart

Как результат сервис останавливается.
Я так понимаю это потому что в параметрах у нас не включена проверка "health-check":
http_enable_paths=rest,action,admin,shared,embed_player,empty

Это так и должно быть ? т.е. или включено и все работает или сервис будет останавливаться

После тго как ручное определение параметра http_enable_paths убрали, сервис перестал отваливаться, один раз немного ругается : New main PID 2659 does not belong to service, and PID file is not owned by root. Refusing. но при этом все нормально работает.
 

Max

Administrator
Staff member
Это так и должно быть ? т.е. или включено и все работает или сервис будет останавливаться
Да. Необходимо разрешить доступ к этому эндпойнту, в Вашем случае добавить health-check в конец списка
Code:
http_enable_paths=rest,action,admin,shared,embed_player,empty,health-check
Пример приведен в документации.
После тго как ручное определение параметра http_enable_paths убрали, сервис перестал отваливаться, один раз немного ругается : New main PID 2659 does not belong to service, and PID file is not owned by root. Refusing. но при этом все нормально работает.
Это ожидаемое поведение: сервис стартует от пользователя root, а java машина от пользователя flashphoner. Если это мешает. можно переключиться в режим запуска от root:
Code:
/usr/local/FlashphonerWebCallServer/bin/webcallserver set-root-mode enable
 

pantera

New Member
спасибо еще раз :)
p.s. но было бы удобно если настройка конфигурации не влияла на работу сервиса
 

Max

Administrator
Staff member
p.s. но было бы удобно если настройка конфигурации не влияла на работу сервиса
К сожалению, эта настройка связана с работой сервиса самым прямым образом. Изначально, эндпойнт был добавлен для того, чтобы работало автоматическое развертывание инстансов в облаках. Например, тот же Google Cloud или AWS требует http эндпойнт для проверки работы сервера.
Поэтому отключать его нельзя. Но и каких-либо возможных уязвимостей он не несет, просто отдает 200 OK.
 
Top