Tôi có tệp JAR thực thi. Có thể tạo một dịch vụ Windows của JAR đó không? Trên thực tế, tôi chỉ muốn chạy điều đó khi khởi động, nhưng tôi không muốn đặt tệp JAR đó trong thư mục khởi động của tôi, không phải trong sổ đăng ký.Cách tạo dịch vụ windows từ java jar?
Trả lời
Bài viết này sẽ cho bạn biết tất cả những gì bạn cần biết: "Running Java Applications as a Windows Service"; nó đề cập đến việc sử dụng "Java Service Wrapper" (có một phiên bản cộng đồng gọi là YAJSW)
http://yajsw.sourceforge.net/ – Ben
Tanuki thay đổi giấy phép của JSW một số thời gian trước đây, nếu tôi là để bắt đầu một dự án, tôi sẽ sử dụng Yet Another Java Service Wrapper, http://yajsw.sourceforge.net/ mà là nhiều hơn hoặc ít hơn một triển khai mã nguồn mở bắt chước JWS, và sau đó xây dựng trên nó và cải thiện nó hơn nữa.
CHỈNH SỬA: Tôi đã sử dụng YAJSW trong vài năm trên một số platorms (Windows, một số linux ...) và nó là rất tốt, phát triển đang diễn ra.
Tôi đã thử nghiệm với Apache Commons Daemon. Nó hỗ trợ các cửa sổ (Procrun) và unix (Jsvc). Trình cài đặt nâng cao có Java Service tutorial với dự án ví dụ để tải xuống. Nếu bạn nhận được javaservice.jar của họ hoạt động như một dịch vụ windows, bạn có thể kiểm tra nó bằng cách sử dụng "telnet 4444". Tôi đã sử dụng ví dụ của họ vì tôi tập trung vào việc chạy một dịch vụ java windows, chứ không phải viết java.
Đối với dịch vụ Windows [WinRun4j] (http://winrun4j.sourceforge.net/) cũng là một ứng cử viên tốt, nó có thể tăng gấp đôi như một Trình khởi chạy Java hoặc Trình bao bọc dịch vụ – mcdon
Với procrun bạn cần phải sao chép prunsrv vào thư mục ứng dụng (download), và tạo ra một install.bat như thế này:
set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%
Tôi đoán để
- chạy này từ cùng một thư mục nơi jar và prunsrv.exe là
- bình có MANIFEST.MF
- và bạn đã tắt móc đăng ký vào JVM (cho ví dụ với context.registerShutdownHook() trong Spring) ...
- không sử dụng đường dẫn tương đối cho các tệp bên ngoài bình (ví dụ log4j nên được sử dụng với log4j.appender.X.File = $ {app.home}/logs /my.log hoặc một cái gì đó tương tự)
Kiểm tra procrun manual và this tutorial để biết thêm thông tin.
có bất kỳ ví dụ nào mà bạn có thể chia sẻ không? –
có: xem phần bên trên :-) bạn cần gì khác? – BTakacs
Cảm ơn BTakacs, tôi đã kiểm tra hướng dẫn của bạn và nó hoạt động tốt. Nhưng tiếc là điều đó không giải quyết được những gì tôi muốn làm .. Tôi đang cố gắng đạt được điều đó ngay từ C#. –
Giải pháp đơn giản nhất tôi tìm thấy cho điều này cho đến nay là Cách sử dụng Non-Sucking Service Manager
sẽ
nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"
Tôi đã làm như vậy và cài đặt thành công nhưng ngay sau khi tôi chạy nó, nó cho biết 'trạng thái không mong muốn SERVICE-PAUSED in đáp ứng với điều khiển START ' – aneela
@ kopernik, Điều tương tự cũng xảy ra với tôi ... xin vui lòng giúp đỡ .. – Shakthi
Vấn đề tương tự như bạn đã đề cập. Bất cứ ý tưởng gì là sai? –
Sử dụng nssm.exe nhưng hãy nhớ để thiết lập AppDirectory hoặc bất kỳ thư viện hoặc nguồn lực cần thiết sẽ không thể truy cập . Theo mặc định, nssm đặt thư mục làm việc hiện tại vào thư mục của ứng dụng, java.exe, không phải là jar. Vì vậy, hãy thực hiện việc này để tạo tập lệnh theo lô:
pushd <path-to-jar>
nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"
Điều này sẽ khắc phục sự cố tạm dừng dịch vụ.
Điều này tốt ... Bạn nên thêm nó làm bình luận cho câu trả lời của kopernik. –
Đặt AppDirectory sau khi tạo dịch vụ không thành công trong trường hợp của tôi. Nhưng bạn có thể khởi chạy một gui với 'nssm install
- 1. bắt đầu dịch vụ windows từ java
- 2. Cách gọi dịch vụ windows từ asp.net
- 3. Cách tạo Dịch vụ Windows Celery?
- 4. Tìm trạng thái dịch vụ Windows từ ứng dụng Java?
- 5. Dịch vụ WCF và Dịch vụ Windows
- 6. Cách tạo dịch vụ Windows cho Mac OS X?
- 7. Làm cách nào để chạy tệp java .jar dưới dạng dịch vụ cửa sổ trên máy chủ Windows 2008?
- 8. Cách tạo dịch vụ Windows với các tham số?
- 9. Cách đọc tệp văn bản từ Dịch vụ Windows?
- 10. Cách tạo Dịch vụ nghe C# cho MSMQ dưới dạng dịch vụ Windows
- 11. Làm cách nào để tạo một JAR từ .java
- 12. gọi Dịch vụ an toàn từ Java
- 13. Cách sử dụng giá trị của appSettings từ tệp App.Config khi tạo Dịch vụ Windows
- 14. Cách tạo các dịch vụ web SOAP bằng java
- 15. Java - Tạo một Lớp từ một Tệp Jar
- 16. Cách theo dõi các dịch vụ Windows
- 17. Dịch vụ web chậm (và dịch vụ WCF) gọi từ Windows 7
- 18. Cách chạy tác vụ khi dịch vụ windows khởi động?
- 19. Thực hiện khởi tạo dài trong Dịch vụ Windows
- 20. Cách tạo tệp .jar hoặc xuất jar trên IntelliJ (như xuất nhật java lưu trữ eclipse)
- 21. Hiển thị hộp thông báo từ Dịch vụ Windows
- 22. Dịch vụ Windows: lỗi 5: Truy cập bị từ chối
- 23. Tạo Dịch vụ Web từ Tệp WSDL
- 24. Ngôn ngữ dễ nhất để tạo dịch vụ Windows
- 25. Dịch vụ Windows trên EC2?
- 26. bắt đầu quá trình từ dịch vụ .NET windows
- 27. Nhận kích thước màn hình nền từ Dịch vụ Windows?
- 28. META-INF/dịch vụ trong JAR với Gradle
- 29. Truy cập vào jar Java từ Delphi
- 30. Cách gọi phương thức chạy dịch vụ windows
Không có trong sổ đăng ký?Vậy tại sao bạn muốn nó như một Dịch vụ? –
@ o.k.w là đúng nếu bạn đang tạo cửa sổ dịch vụ, Nó sẽ tạo mục nhập trong sổ đăng ký. –
Tôi nghĩ người dùng này có nghĩa là "chạy dưới dạng dịch vụ, không phải từ khóa đăng ký khởi động dưới dạng dịch vụ không" –