У меня есть система, которую мы используем на работе здесь, которая, похоже, работает очень хорошо с сервисами. Наша развернутая система насчитывает около 20-30 сервисов в любой момент времени. На работе мы используем продукт под названием TopShelf, вы можете найти его здесь http://topshelf-project.com/
В основном TopShelf обрабатывает много всего связанного с обслуживанием материала. Установка, удаление и т. Д. Все из строки cmd службы. Одной из очень полезных функций является возможность запуска в качестве консоли для отладки. Вы создаете одну услугу, и с другим запуском линии cmd вы можете запускать ее как консоль, чтобы увидеть результат работы службы. Мы добавили одну специальную функцию к этому программному обеспечению, которая позволяет нам заранее настраивать профили. В основном наши профили настраивают несколько вещей, таких как ведение журнала, расположение ресурсов и т. Д., Чтобы мы могли контролировать все это, не переиздавая какой-либо код. Все, что мы делаем, это запустить команду, как
D: \ Services \ ServiceName.exe Core.Profiles.Debug или
D: \ Services \ ServiceName.exe Core.Profiles.Производство
для получения различных конфигураций каротажа.
Наш скрипт сборки создает сценарии install.cmd и uninstall.cmd для каждого из наших сервисов, все, что мы делаем, это копирование файлов на сервер и запуск сценария. Если мы хотим увидеть вывод отладки, мы остановим службу и дважды щелкните по exe, и мы получим консоль, чтобы прочитать весь вывод.
Еще одна вещь, которую имеет верхняя часть, которую мы не используем, потому что ее нет необходимости в концепции стеллажей (для этого есть документация на этом веб-сайте). Это позволяет обновлять службу без необходимости перезапуска, но вам все равно нужно скопировать файлы вручную, если вы не создадите для этого автоматизированную систему.
Однако мое предложение, если вам нужна 100% -ная доступность услуг, заключается в наличии избыточной системы. Независимо от того, как вы настраиваете свою услугу для обновлений, вы не можете избежать сбоя оборудования, что приведет к простою без автоматической системы аварийного переключения. Если бы эта система была на месте, моя рекомендуемая стратегия обновления заключалась бы в том, чтобы отключить 1 узел, обновить, протестировать, включить выключить другой узел, обновить, протестировать и снова включить второй узел. Вы можете сделать это, конечно, с помощью простого сценария. Это может быть более сложная система, чем вам нужно, но если вы не можете воспользоваться сервисом в автономном режиме для простого перезапуска, который занимает 5 секунд, вам действительно нужна какая-то система для решения аппаратных проблем, потому что я могу гарантировать, что это произойдет в конечном итоге.
Также см http://stackoverflow.com/questions/4002462/how-can-i-write-a-java-application-that-can-update-itself-at-runtime/4002465#4002465 –