Chạy tệp bó như một dịch vụ Windows


159

Để chạy một ứng dụng, một tệp bó phải được khởi động (làm những việc như khởi động Cầu tàu, hiển thị nhật ký trực tiếp, v.v.). Ứng dụng sẽ chỉ hoạt động nếu tệp bó này đang chạy. Do đó, tôi buộc phải chạy tệp bó này và không đăng xuất khỏi máy chủ Windows.

Tập tin lô này có thể được chạy như một dịch vụ? Tôi đang thử nghiệm một trong những gợi ý từ một câu hỏi tương tự .


27
Lập trình hàng loạt là chủ đề cho Stack Exchange.
Harry Johnston

12
Câu hỏi hay. +1. Người điều hành quá tức giận ... Ngoài ra tôi có một câu trả lời hay khác , nhưng câu hỏi đã bị đóng ((
gavenkoa

Tôi sử dụng RunAsService này thay thế: runasservice.com . Nó rất nhiều, đơn giản hơn nhiều để sử dụng. Không có cấu hình XML vô nghĩa. Về cơ bản, điều này chỉ cung cấp cho bạn chương trình thực thi RunAsService.exe, nó bao bọc bất kỳ ứng dụng bảng điều khiển nào với các đối số dòng lệnh như một dịch vụ. Tôi sử dụng điều này để chạy các tập lệnh bash Cygwin như các dịch vụ !!! Thật không may, công cụ đơn giản này dường như là nguồn đóng.
Kaz

8
đề cử mở lại trên cơ sở "các công cụ phần mềm thường được lập trình viên sử dụng". Mà câu trả lời cho câu hỏi này chắc chắn là. Cũng lưu ý rằng đây là kết quả đầu tiên của Google khi tìm kiếm "cửa sổ bắt đầu tập tin hàng loạt như một dịch vụ", vì vậy liệu nó có nằm trong phạm vi hẹp mà một số người điều hành là "chủ đề" mà phần còn lại của thế giới nghĩ là không. Tôi bỏ phiếu cho chủ nghĩa thực dụng đối với chủ nghĩa giáo điều ở đây.
Adam Cameron

Một câu hỏi tương tự có thể được tìm thấy tại serverfault serverfault.com/questions/54676/ Kẻ
Stephen Quan

Câu trả lời:


151

NSSM hoàn toàn miễn phí và siêu dễ dàng, chạy lệnh nhắc / thiết bị đầu cuối với tư cách quản trị viên:

nssm install "YourCoolServiceNameLabel"

sau đó một hộp thoại sẽ xuất hiện để bạn có thể chọn nơi bạn muốn chạy.

gỡ cài đặt

nssm remove "YourCoolServiceNameLabel"

25
+1 Chưa bao giờ nghe về cái này nhưng nó rất hay. NSSM không thực sự hút!
Byron Whitlock

1
Tôi mất 2 phút để cài đặt dịch vụ
Ben Wilde

3
@Junior M Cảm ơn !! Bạn đã cứu tôi. Tôi đã dành 4 giờ cho việc này. Cảm ơn!!
Verystrongjoe

2
Bạn có biết có cách nào để đưa ra nssmtất cả các đối số cần thiết ở đầu vào để tránh việc nhập dữ liệu bật lên không - tôi đang cố gắng tự động hóa quy trình?
lưỡng cư

1
NSSM liên tục bị xóa tại một số khách hàng của chúng tôi bằng chương trình chống vi-rút GDATA. Vâng, tôi biết, danh sách trắng ... nhưng khách hàng không làm những gì tốt cho họ. Đó là sự thật đáng buồn.
Chủ tịch Dreamspace

61

Tại sao không chỉ đơn giản là thiết lập nó như một Tác vụ theo lịch trình được lên lịch để chạy khi khởi động?


1
Tôi có một số tệp bó thực hiện sao lưu thông qua bản sao lưu mà tôi bắt đầu thông qua Tác vụ theo lịch trình (đi tới Bảng điều khiển, Tác vụ theo lịch) chạy trên máy chủ Win 2003. Làm việc một điều trị ...
SAL

Chỉ cần làm điều này với một tập lệnh chúng tôi sử dụng để theo dõi dịch vụ sao lưu của chúng tôi. Nó hoạt động như một say mê.
nhạc2myear

1
Đây là giải pháp tốt nhất imo. không yêu cầu phần mềm của bên thứ ba và không có giao diện dòng lệnh. Ngoài ra, Trình lập lịch tác vụ cung cấp nhiều tùy chọn cho trình kích hoạt, điều kiện, v.v.
dev

3
Bây giờ tôi đã tìm ra điều này: Khi tác vụ chạy khi khởi động (với "Chạy dù người dùng có đăng nhập hay không")% UserProfile% là C: \ Users \ Mặc định \ Bất kỳ lúc nào khác, đó sẽ là C: \ Users \ ExpectedUser \ Điều này có thể tạo ra các lỗi bí ẩn cho một số tệp .bat dường như hoạt động tốt trong các tác vụ theo lịch trình khác.
dùng1754036

2
Các tác vụ theo lịch trình nổi tiếng là không đáng tin cậy - Tôi thực sự gặp phải câu hỏi này vì tất cả các vấn đề tôi gặp phải với các nhiệm vụ không khởi động đúng hạn mà không có lý do rõ ràng.

22

Có một cmd được xây dựng trong windows để làm điều này: sc tạo . Không lạ mắt như nssm, nhưng bạn không cần phải tải xuống một phần mềm bổ sung.

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

Ghi chú

  • bắt đầu = nhu cầu có nghĩa là bạn phải tự bắt đầu dịch vụ
  • khoảng trắng được yêu cầu sau =
  • Tôi đã gặp phải một lỗi khi bắt đầu dịch vụ rằng dịch vụ không đáp ứng kịp thời, nhưng rõ ràng dịch vụ đã chạy .bat thành công. Chưa đi sâu vào vấn đề này nhưng chủ đề này đã trải nghiệm điều tương tự và giải quyết nó bằng cách sử dụng nssm để cài đặt dịch vụ.

4
Windows dường như không chạy các tệp .bat dưới dạng dịch vụ.
Perkins

@Perkins - Mine đã làm việc ngày hôm qua trên một vài máy. Bạn đang trải nghiệm một cái gì đó cụ thể? Tôi đã gặp phải một lỗi mà dịch vụ đã không đáp ứng kịp thời khi bắt đầu, nhưng tệp .bat là để khởi động máy chủ Kibana node.js và nó đã chạy thành công ngay cả khi có lỗi. Những người trong chủ đề này dường như trải nghiệm điều tương tự nhưng không với nssm. stackoverflow.com/a/40130630/885535
w00ngy

2
Trong trường hợp của tôi, các tệp mà tệp bó được cho là không được tạo và các chương trình không chạy, vì vậy tôi phải giả sử rằng nó không khởi động nó. Tôi đã quản lý để khắc phục nó bằng cách tạo dịch vụ để chạy cmd.exe / C <batchfile>. Lưu ý rằng tôi đang sử dụng Windows 10, vì vậy đây có thể là một số điều "bảo mật" mới.
Perkins

@Perkins Tôi vừa mới chạy nó trên win10 1803, không vấn đề gì, hãy khởi động máy chủ node.js của tôi. Tập tin bat có tạo các tập tin và chạy các dịch vụ khi được gọi từ cmd hoặc powershell không? Bạn có nhận được bất kỳ hộp tin nhắn nào khi bạn bắt đầu dịch vụ không? Dịch vụ của bạn có được phép vào những thư mục đó không? Bạn có thể thêm một số lỗi đăng nhập trong bat bằng cách viết vào logfile cục bộ, xem nó có hoạt động không.
w00ngy

1
Nhận " Lỗi 1053: Dịch vụ không đáp ứng yêu cầu bắt đầu hoặc kiểm soát một cách kịp thời. "
Alex Klaus

5

Không cần thêm phần mềm. Sử dụng bộ lập lịch tác vụ -> tạo tác vụ -> ẩn. Các hộp kiểm cho ẩn nằm ở góc dưới bên trái. Đặt tác vụ để kích hoạt khi đăng nhập (hoặc bất kỳ điều kiện nào bạn thích) và chọn tác vụ trong tab hành động. Chạy nó ẩn đảm bảo rằng tác vụ chạy âm thầm trong nền giống như một dịch vụ.

Lưu ý rằng bạn cũng phải đặt chương trình để chạy "cho dù người dùng có đăng nhập hay không" hoặc chương trình vẫn sẽ chạy ở nền trước.


3

Như Doug Currie nói hãy sử dụng RunAsService.

Từ kinh nghiệm trước đây của tôi, bạn phải nhớ rằng Dịch vụ bạn tạo sẽ

  • có một bộ biến môi trường hoàn toàn khác
  • phải được kiểm tra cẩn thận về các vấn đề quyền / quyền
  • có thể gây ra sự tàn phá nếu nó mở hộp thoại yêu cầu bất kỳ loại đầu vào nào

không chắc chắn liệu cái cuối cùng có còn áp dụng hay không ... đó là một đêm lớn trong một dự án tôi đã làm việc cách đây một thời gian.


3

Mặc dù nó không miễn phí (nhưng $ 39), nhưng FireDaemon đã hoạt động rất tốt đối với tôi, tôi phải giới thiệu nó. Nó sẽ chạy tệp bó của bạn nhưng có vô số chức năng bổ sung và rất hữu ích như lập lịch, giám sát dịch vụ, cài đặt dịch vụ dựa trên GUI hoặc XML, phụ thuộc, biến môi trường và quản lý nhật ký.

Tôi bắt đầu sử dụng FireDaemon để khởi chạy các máy chủ ứng dụng JBoss ( run.bat ) nhưng ngay sau đó nhận ra rằng sự phong phú của các khả năng cấu hình FireDaemon cho phép tôi bỏ tập tin bó và tạo lại ý định của các lệnh trong định nghĩa dịch vụ FireDaemon.

Ngoài ra còn có SUPER FireDaemon có tên Trinity mà bạn có thể muốn xem nếu bạn có một số lượng lớn máy chủ Windows để quản lý dịch vụ này (hoặc về mặt kỹ thuật, bất kỳ dịch vụ nào).


2

Trên Windows 2019 Server, bạn có thể chạy máy chủ java Minecraft bằng các lệnh sau:

sc tạo minecraft-server DisplayName = "minecraft-server" binpath = "cmd.exe /CC:\Users\Ad Administrator\Desktop\rungui1151.lnk" type = own start = auto

Tệp .lnk là một phím tắt windows tiêu chuẩn cho một tệp bó.

--- tập tin .bat bắt đầu ---

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

--- tập tin .bat kết thúc ---

Tất cả điều này bởi vì:

dịch vụ không biết làm thế nào để bắt đầu trong một thư mục,

cmd.exe không biết làm thế nào để bắt đầu trong một thư mục

Bắt đầu dịch vụ sẽ tạo ra lỗi "kịp thời", nhưng tệp nhật ký cho thấy máy chủ đang chạy.

Nếu bạn cần tắt máy chủ, chỉ cần vào trình quản lý tác vụ và tìm java máy chủ trong các quy trình nền và kết thúc hoặc chấm dứt máy chủ trong trò chơi bằng lệnh / stop hoặc cho các chương trình / máy chủ khác, sử dụng các phương thức liên quan đến máy chủ.


Điều này không cung cấp một câu trả lời cho câu hỏi. Một khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào ; thay vào đó, cung cấp câu trả lời không yêu cầu làm rõ từ người hỏi . - Từ xét
Jeremy J Starcher

1
nếu bạn đọc đúng, bạn sẽ nhận thấy nó chứa câu trả lời hoàn hảo, có liên quan đến một ví dụ
Goofyseeker311

0

Luôn luôn sẽ dễ dàng chạy tập tin hàng loạt của bạn như là một dịch vụ. Nó tương tự như FireDaemon (đã đề cập ở trên) và không miễn phí, nhưng bạn có thể thấy tính năng phong phú được đặt thành một tài sản trong môi trường chuyên nghiệp.

Chúc may mắn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.