Запустить пакетный файл как службу Windows

Чтобы запустить одно приложение, необходимо запустить пакетный файл (который запускает Jetty, отображает живые журналы и т. Д.). Приложение будет работать, только если этот пакетный файл запущен. Следовательно, я вынужден запускать этот пакетный файл, а не выходить с сервера Windows.

Можно ли запустить этот пакетный файл как сервис? Я экспериментирую с одним из предложений аналогичного вопроса.

11 ответов

NSSM является полностью бесплатным и сверхлегким, с командной строкой / терминалом в качестве администратора:

nssm install "YourCoolServiceNameLabel"

тогда появится диалоговое окно, чтобы вы могли выбрать, где находится файл, который вы хотите запустить.

удалить

nssm remove "YourCoolServiceNameLabel"

Почему бы просто не настроить его как запланированное задание, которое планируется запустить при запуске?

Для этого есть встроенный Windows cmd: sc create. Не так красиво, как NSSM, но вам не нужно загружать дополнительное программное обеспечение.

sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]

Заметка

  • start = demand означает, что вы должны запустить службу самостоятельно
  • пробел требуется после =
  • Я обнаружил ошибку при запуске службы, что служба не ответила своевременно, но было ясно, что служба успешно запустила.bat. Еще не копался в этом, но этот поток испытал то же самое и решил это, используя nssm для установки сервиса.

Нет необходимости в дополнительном программном обеспечении. Используйте планировщик задач -> создать задачу -> скрытый. Флажок для скрытого находится в левом нижнем углу. Установите задачу для запуска при входе в систему (или при любом другом условии) и выберите задачу на вкладке действий. Запуск скрытого гарантирует, что задача выполняется в фоновом режиме, как служба.

Обратите внимание, что вы также должны настроить программу на запуск "вне зависимости от того, вошел пользователь в систему или нет", иначе программа все равно будет работать на переднем плане.

На Windows 2019 Server вы можете запустить Java-сервер Minecraft с помощью следующих команд:

sc создать minecraft-server DisplayName= "minecraft-server" binpath= "cmd.exe /C C:\Users\Administrator\Desktop\rungui1151.lnk" type= own start= auto

Файл.lnk - это стандартный ярлык Windows для командного файла.

--- Начало файла.bat ---

java -Xmx40960M -Xms40960M -d64 -jar minecraft_server.1.15.1.jar

---.bat файл заканчивается ---

Все потому, что:

сервис не умеет запускать в папке,

cmd.exe не умеет запускать в папке

Запуск службы вызовет "своевременную" ошибку, но файл журнала показывает, что сервер работает.

Если вам нужно выключить сервер, просто войдите в диспетчер задач и найдите сервер java в фоновых процессах и завершите его, или отключите сервер в игре с помощью команды / stop, или для других программ / серверов используйте методы относится к серверу.

Поскольку NSSM больше не поддерживается, вы можете рассмотреть возможность использования WinSW. У него есть двоичные файлы, которые могут работать как с .Net, так и без него.

Обычно вы создаете XML-файл, а затем устанавливаете его. Вот образец минимального XML:

      <service>

  <!-- ID of the service. It should be unique across the Windows system-->
  <id>myapp</id>

  <!-- Path to the executable, which should be started -->
  <!-- CAUTION: Don't put arguments here. Use <arguments> instead. -->
  <executable>%BASE%\myExecutable.exe</executable>

</service>

А потом можно установить и запустить:

      winsw install myapp.xml
winsw start myapp.xml

Как говорит Дуг Керри, используйте RunAsService.

Из моего прошлого опыта вы должны помнить, что служба, которую вы создадите, будет

  • иметь совершенно другой набор переменных среды
  • должны быть тщательно проверены на наличие прав / разрешений
  • может вызвать хаос, если он открывает диалоги с просьбой о любом виде ввода

не уверен, что последний применился... это была одна большая кобыла в проекте, над которым я работал некоторое время назад.

Хотя он не бесплатный (но стоит 39 долларов), FireDaemon работал так хорошо для меня, что я рекомендую его. Он запускает ваш пакетный файл, но имеет множество дополнительных и очень полезных функций, таких как планирование, мониторинг обслуживания, установка сервисов на основе графического интерфейса или XML, зависимости, переменные среды и управление журналами.

Я начал использовать FireDaemon для запуска серверов приложений JBoss (run.bat), но вскоре понял, что богатство возможностей конфигурации FireDaemon позволило мне отказаться от пакетного файла и воссоздать назначение его команд в определении службы FireDaemon.

Существует также SUPER FireDaemon под названием Trinity, на который вы, возможно, захотите посмотреть, если у вас есть большое количество серверов Windows, на которых можно управлять этой службой (или технически любой службой).

Установите NSSM и запустите файл .bat как службу Windows. Работает как ожидалось

Мой самый простой способ - использовать с открытым исходным кодом ( svcbatchhttps://github.com/mturk/svcbatch/ ) в качестве оболочки CMD (BAT) в sc :

sc create myservice binPath = ""%cd%\svcbatch.exe" myservice.bat"

AlwaysUp легко запустит ваш пакетный файл как сервис. Он похож на FireDaemon (упомянутый выше) и не является бесплатным, но вы можете найти богатый набор функций, который будет полезен в профессиональной среде.

Удачи!

Другие вопросы по тегам