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


159

Для запуску однієї програми потрібно розпочати пакетний файл (що робить такі речі, як запуск Jetty, показ живих журналів тощо). Додаток працюватиме лише в тому випадку, якщо цей пакетний файл працює. Тому я змушений запускати цей пакетний файл, а не виходити з сервера Windows.

Чи можна цей пакетний файл запустити як послугу? Я експериментую з однією з пропозицій з подібного питання .


27
Пакетне програмування є темою для обміну стеками.
Гаррі Джонстон

12
Гарне питання. +1. Модератори занадто сердиті ... Також у мене є ще одна хороша відповідь, але питання закрите ((
gavenkoa

Я використовую замість цього RunAsService: runasservice.com . Це набагато, набагато простіше у використанні. Ні дурниці конфігурації XML В основному це просто дає виконувану програму RunAsService.exe, яка завершує будь-яку консольну програму з аргументами командного рядка як послугу. Я використовую це для запуску Cygwin bash-скриптів як служб !!! На жаль, цей простий інструмент видається закритим.
Каз

8
висунення для повторного відкриття на основі "програмних засобів, які зазвичай використовуються програмістами". Яка відповідь на це питання безумовно є. Також майте на увазі, що це перший результат Google при пошуку "Windows start batch file as a service", тож чи в межах вузької сфери те, що деякі модератори є "на тему", решта світу думає, що це так. Я тут голосую за прагматизм щодо догматизму.
Адам Кемерон

Аналогічне запитання можна знайти на сервері за замовчуванням serverfault.com/questions/54676/…
Stephen Quan

Відповіді:


151

NSSM є абсолютно безкоштовним та надлегким , запускаючи командний рядок / термінал як адміністратор:

nssm install "YourCoolServiceNameLabel"

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

видалити

nssm remove "YourCoolServiceNameLabel"

25
+1 Ніколи не чув про це, але це дуже приємно. НССМ насправді не смокче!
Байрон Вітлок

1
мені знадобилося 2 хвилини, щоб встановити послугу
Бен Уайльд

3
@Junior M Дякую !! Ти врятував мене. Я витратив на це 4 години. Дякую!!
verystrongjoe

2
чи знаєте ви, чи є спосіб надати nssmвсі необхідні аргументи на вході, щоб уникнути спливаючих даних - я намагаюся автоматизувати процес?
амфібій

1
NSSM продовжує видаляти у деяких наших клієнтів антивірус GDATA. Так, я знаю, білі списки ... але клієнти не роблять того, що їм добре. Це сумна правда.
Президент Dreamspace

61

Чому б просто не встановити його як заплановане завдання, яке планується виконати при запуску?


1
У мене є декілька пакетних файлів, які роблять резервні копії за допомогою роботоскопії, яку я запускаю із запланованих завдань (перейдіть на Панель управління, Заплановані завдання), що працюють на сервері Win 2003. Працює частування ...
SAL

Щойно це зробили зі сценарієм, який ми використовували для моніторингу нашої служби резервного копіювання. Це працює як шарм.
music2myear

1
це найкраще рішення imo. не потрібне програмне забезпечення сторонніх розробників та інтерфейс командного рядка. Плюс планувальник завдань надає безліч варіантів для тригерів, умови і т.д.
Dev

3
Працює зараз, коли я зрозумів це: Коли завдання запускається при запуску (з "Запустити, чи користувач увійшов чи ні")% UserProfile% - це C: \ Користувачі \ За замовчуванням \ Будь-який інший час це буде очікуваним C: \ Користувачі \ Очікуваний користувач \ Це може створити таємничі збої для деяких файлів .bat, які, здається, добре справляються з іншими запланованими завданнями.
користувач1754036

2
Заплановані завдання є сумнівно ненадійними - я насправді натрапив на це питання через усі проблеми, які виникли із завданнями, які не запускалися вчасно без видимих ​​причин.

22

Для цього є вбудований Windows cmd: sc create . Не настільки фантазії, як nssm, але вам не доведеться завантажувати додатковий фрагмент програмного забезпечення.

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

Примітка

  • start = попит означає, що ви повинні запустити послугу самостійно
  • пробіл потрібен після =
  • У мене сталася помилка при запуску сервісу, що служба не реагувала вчасно, але було зрозуміло, що служба успішно запустила .bat. Ще не вникав у цю тему, але цей потік випробував те саме і вирішив його, використовуючи nssm для встановлення служби.

4
Здається, Windows не запускає файли .bat як служби.
Перкінс

@Perkins - Шахта працювала вчора над парою машин. Ви відчуваєте щось конкретне? Я зіткнувся з помилкою, що служба не відповіла на неї своєчасно при запуску, але файл .bat повинен був запустити Kibana node.js сервер, і він працював успішно навіть при помилці. Хлопці з цієї теми, здавалося, відчували те саме, але не з nssm. stackoverflow.com/a/40130630/885535
w00ngy

2
У моєму випадку файли, які повинен створити пакетний файл, не створюються, а програми не запускаються, тому я повинен припустити, що він не запускає його. Мені вдалося обійти його, створивши службу для запуску cmd.exe / C <batchfile>. Зауважте, що я використовую Windows 10, тому це може бути якась нова «безпека».
Перкінс

@Perkins Я щойно запустив його на win10 1803 без проблем, запускає свій сервер node.js. Чи створює bat-файл файли та запускає служби, коли викликається з cmd або powershell? Чи отримуєте ви будь-які вікна msg, коли переходите до запуску послуги? Чи має ваша служба дозвіл на ці каталоги? Ви можете додати деякі помилки в реєстрації в bat, записавши в локальний файл файлів, дивіться, чи це працює.
w00ngy

1
Отримайте " Помилка 1053: Служба не вчасно відповіла на запит на запуск чи контроль "
Алекс Клаус

5

Не потрібно додаткового програмного забезпечення. Використовуйте планувальник завдань -> створити завдання -> приховано. Поле прапорця для прихованого знаходиться в нижньому лівому куті. Встановіть завдання для запуску під час входу (або за будь-якої умови, яка вам подобається) та виберіть завдання на вкладці "Дії". Запуск його приховано гарантує, що завдання працює безшумно у фоновому режимі, як послуга.

Зауважте, що ви також повинні встановити програму для запуску "незалежно від того, чи користувач увійшов чи ні", або програма все ще буде працювати на передньому плані.


3

Як каже Дуг Керрі, використовуйте RunAsService.

З мого минулого досвіду ви повинні пам’ятати, що послуга, яку ви створюєте, буде

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

не впевнений, чи застосовується останній… це була одна велика нічна кобила в проекті, над яким я працював деякий час тому.


3

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

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

Також є SUPER FireDaemon під назвою Trinity, на який ви можете поглянути, якщо у вас є велика кількість серверів Windows, на яких можна керувати цією службою (або технічно будь-яка служба).


2

На сервері Windows 2019 можна запустити Java-сервер Minecraft за допомогою цих команд:

sc створити minecraft-сервер DisplayName = "minecraft-сервер" binpath = "cmd.exe /CC:\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 або для інших програм / серверів, використовуйте методи стосується сервера.


Це не дає відповіді на запитання. Коли у вас буде достатня репутація, ви зможете коментувати будь-яку публікацію ; натомість надайте відповіді, які не потребують уточнення від запитувача . - З огляду
Jeremy J Starcher

1
якщо ви правильно прочитаєте, то помітите, що вона містить ідеальну відповідь, відповідну прикладу
Goofyseeker311,

0

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

Удачі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.