alibek Опубликовано 30 декабря, 2013 · Жалоба Есть сервер FreeBSD 8.2 x64. Сервер работает контроллером для хотспота UniFi. Раньше на сервере была версия 2.3.3, работала как часы. Затем я обновил до 2.4.6, некоторое время работало нормально, но затем начало вылетать. Вылет заключается в том, что через несколько часов работы (иногда через 4, иногда через 20) перестает отвечать веб-интерфейс админ-панели. В логах в этот момент сообщения об ошибках — различные исключения и нехватка памяти. Заводил тему на форуме Ubiquiti, но без ответа. Если культурно прибить процесс java (через TERM, а не KILL), то она очень долго закрывается (минуты две-три), грузит при этом CPU на 100% и не закрывает mongod. Из-за этого впоследствии она не рестартится, нужно вручную прибить также процесс mongod. Чтобы временно решить проблему, завел такой костыль: killall mongod && killall -KILL java && sleep 1 && rm nohup.out && ./unifi.sh start При выполнении этих команд контроллер успешно рестартует (в unifi.sh просто вызов ява-приложения через nohup). Но когда я эту же команду оформляю с cron, то получаю странный результат: #!/bin/sh cd /data/hotspot/UniFi CLOCK=`date +"%Y-%m-%d %H:%M:%S"` if [ -f nohup.out ] then if [ -s nohup.out ] then echo "$CLOCK - unifi hang, force restart" >> unifi-restart.log killall mongod sleep 1 killall -KILL java sleep 1 rm nohup.out sleep 1 ./unifi.sh start else echo "$CLOCK - unifi ok, continue" >> unifi-restart.log fi else echo "$CLOCK - unifi crash, starting" >> unifi-restart.log killall mongod sleep 1 killall -KILL java sleep 1 rm nohup.out sleep 1 touch nohup.out ./unifi.sh start fi В теории, этот скрипт, запускаемый каждый час, должен проверять на наличие файл nohup.out. Если файла по какой-то причине нет, то он стартует контроллер. Если файл есть и он не пустой (а без ошибок в логи ничего не идет), то сервисы рестартятся. Если файл есть и он пустой, то все хорошо. Если скрипт запускать вручную, то он всегда именно так и работает. Но когда скрипт запускается через планировщик, иногда файл nohup.out не создается (хотя процессы есть). Иногда создается, но процессов нет (видимо они завершаются аварийно). Не подскажите, как подправить скрипт, чтобы работал всегда? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vlad11 Опубликовано 30 декабря, 2013 (изменено) · Жалоба Откройте для себя monit. Затем используйте service mongod stop вместо killall mongod (хотя я не понимаю, зачем стопать, если проблема в Яве?) И, наконец, напишите скрипт сервиса для вашего приложения Java, я в свое время за полчаса переделал под свое приложение. Изменено 30 декабря, 2013 пользователем vlad11 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 30 декабря, 2013 · Жалоба monit изучу. service mongod не в тему, это не системный сервис, его из своих потрохов стартует контроллер UniFi. Что подразумевается под скриптом сервиса? Стартер rc.d или стартер для jar? Если первое, то пока необходимости нет, если второе, то unifi.sh оно и есть. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vlad11 Опубликовано 30 декабря, 2013 · Жалоба service mongod не в тему, это не системный сервис, его из своих потрохов стартует контроллер UniFi. Вот поэтому и странно, когда в портах есть база Mongodb. Можно из портов поставить софт и выкинуть mongod неизвестного происхожения (бинарный blob). Что подразумевается под скриптом сервиса? Стартер rc.d или стартер для jar? Если первое, то пока необходимости нет, если второе, то unifi.sh оно и есть. man rc Своими словами: Скрипт сервиса - корректный старт приложения, формирование pid файла для мониторинга работы и корректный финиш процесса. В вашем случае - грязный хак по запуску набора приложений без должного контроля взаимной работы. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...