كيفية إنشاء خدمة Windows من Java Jar؟
-
06-07-2019 - |
سؤال
لدي ملف جرة قابلة للتنفيذ. هل من الممكن إنشاء خدمة Windows لتلك الجرة؟ في الواقع ، أريد فقط تشغيل ذلك عند بدء التشغيل ، لكنني لا أريد وضع ملف الجرة هذا في مجلد بدء التشغيل الخاص بي ، ولا في السجل.
المحلول
يجب أن تخبرك هذا المقال بكل ما تحتاج إلى معرفته:"تشغيل تطبيقات Java كخدمة Windows"; ؛ يذكر باستخدام "غلاف خدمة جافا"(هناك طبعة مجتمعية تسمى yajsw)
نصائح أخرى
أسهل حل وجدته لهذا حتى الآن هو مدير الخدمة غير الامتصاص
سيكون الاستخدام
nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"
استخدم NSSM.Exe ولكن تذكر أن تضع AppDirectory أو أي مكتبات أو موارد مطلوبة لن تكون متاحة. بشكل افتراضي ، قام NSSM بتعيين دليل العمل الحالي على تطبيق التطبيق ، Java.exe ، وليس الجرة. لذا افعل هذا لإنشاء برنامج نصي دفعة:
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>"
هذا يجب أن يصلح قضية توقف الخدمة.
لقد كنت أجرب مع Apache Commons Daemon. إنه يدعم Windows (بروبون) و UNIX (JSVC). المثبت المتقدم لديه ملف جافا خدمة البرنامج التعليمي مع مثال مشروع للتنزيل. إذا حصلت على تشغيل javaservice.jar كخدمة Windows ، فيمكنك اختبارها باستخدام "Telnet 4444". لقد استخدمت مثالهم لأن تركيزي كان على تشغيل خدمة Java Windows ، وليس كتابة Java.
قام Tanuki بتغيير ترخيص JSW منذ بعض الوقت ، إذا كنت سأبدأ مشروعًا ، فسأستخدم غلاف خدمة Java آخر ، http://yajsw.sourceforge.net/ هذا هو تطبيق مفتوح المصدر إلى حد ما يحاكي JWs ، ثم يبني عليه ويحسنه أكثر.
تحرير: لقد كنت أستخدم Yajsw لعدة سنوات على العديد من اللوحات (Windows ، العديد من Linuxes ...) وهو رائع ، التطور مستمر.
مع Procrun ، تحتاج إلى نسخ Prunsrv إلى دليل التطبيق (تحميل) ، وإنشاء install.bat مثل هذا:
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%
أفترض
- قم بتشغيل هذا من نفس الدليل حيث تكون الجرة و prunsrv.exe
- الجرة لديها بيان العمل
- ولديك خطافات إغلاق مسجلة في JVM (على سبيل المثال مع Context.registerShutDownHook () في الربيع) ...
- عدم استخدام المسارات النسبية للملفات خارج الجرة (على سبيل المثال ، يجب استخدام Log4J log4j.appender.x.file = $ {app.home} /logs/my.log أو شيء على حد سواء)
تحقق من Procrun كتيب و هذا البرنامج التعليمي للمزيد من المعلومات.
نحن نستخدم ال غلاف خدمة تانوكي من أجل هذا. إنه قابل للتكوين للغاية.
خيار آخر هو Winsw: https://github.com/kohsuke/winsw/
قم بتكوين ملف XML لتحديد اسم الخدمة ، وماذا يتم تنفيذه ، وأي وسيط وما إلى ذلك واستخدم EXE للتثبيت. مثال XML: https://github.com/kohsuke/winsw/tree/master/examples
أنا أفضل هذا على NSSM ، لأنه exe خفيفة الوزن ؛ ويسهل مشاركة/الالتزام بالتكوين XML.
ملاحظة يتم تثبيت الخدمة عن طريق التشغيل your-service.exe install