Ðí¶àJavaÓ¦Óñ»´ò°ü³ÉJAR£¨Java ARchive£©Îļþ£¬²¢Í¨¹ýÃüÁîÐлòÕß·þÎñ¹ÜÀí¹¤¾ßÔÚLinux·þÎñÆ÷ÉÏÔËÐÐ
È»¶ø£¬Ëæ×ÅÓ¦Óõĵü´úÉý¼¶»òά»¤ÐèÇó£¬ÈçºÎÓÅÑŵØÍ£Ö¹ÕâЩÔËÐеÄJARÓ¦ÓóÉΪÁËÒ»¸ö²»¿ÉºöÊÓµÄÎÊÌâ
±¾ÎĽ«ÉîÈë̽ÌÖÔÚLinux»·¾³ÏÂÍ£Ö¹JARÓ¦Óõķ½·¨¡¢×¢ÒâÊÂÏîÒÔ¼°×î¼Ñʵ¼ù£¬È·±£ÄãµÄ²Ù×÷¼È¸ßЧÓÖ°²È«
Ò»¡¢Àí½âLinuxϵÄJARÓ¦ÓÃÔËÐлúÖÆ ÔÚLinuxϵͳÉÏ£¬JARÎļþͨ³£Í¨¹ý`java -jar`ÃüÁîÆô¶¯
ÀýÈ磺 java -jar myapp.jar ÕâÌõÃüÁî»áÆô¶¯Ò»¸öJavaÐéÄâ»ú£¨JVM£©£¬¼ÓÔØ²¢Ö´ÐÐJARÎļþÖеĴúÂë
JVM½ø³Ì»á³ÖÐøÔËÐУ¬Ö±µ½Ó¦ÓóÌÐò×ÔÐÐÖÕÖ¹£¨Èçͨ¹ý´úÂëÖеÄ`System.exit()`µ÷Óã©»ò½ÓÊÕµ½ÍⲿÖÕÖ¹ÐźÅ
¶þ¡¢Ö±½ÓÍ£Ö¹·½·¨£ºÊ¹ÓÃ`kill`ÃüÁî ×îÖ±½ÓµÄ·½·¨ÊÇʹÓÃLinuxµÄ`kill`ÃüÁîÀ´ÖÕÖ¹JVM½ø³Ì
Ê×ÏÈ£¬ÄãÐèÒªÖªµÀÔËÐÐJARÓ¦ÓõÄJVM½ø³ÌµÄPID£¨Process ID£©
¿ÉÒÔͨ¹ýÒÔϼ¸ÖÖ·½Ê½»ñÈ¡PID£º 1.ʹÓÃpsÃüÁî½áºÏgrep£º ```bash ps aux | grep myapp.jar | grep -v grep ``` Õ⽫ÁгöËùÓаüº¬`myapp.jar`µÄ½ø³ÌÐÅÏ¢£¬ÆäÖÐ`PID`Áм´Îª½ø³ÌID
2.ʹÓÃjps¹¤¾ß£¨Java Virtual Machine Process Status Tool£©£º Èç¹û°²×°ÁËJDK£¬¿ÉÒÔʹÓÃ`jps`ÃüÁîÖ±½ÓÁгöËùÓÐJava½ø³Ì¼°ÆäÖ÷ÀàÃû»òJARÎļþÃû£º ```bash jps -l | grep myapp.jar ``` Õ⽫ֱ½ÓÏÔʾÓë`myapp.jar`Ïà¹ØµÄJVM½ø³ÌµÄPID
»ñÈ¡µ½PIDºó£¬¿ÉÒÔʹÓÃ`kill`ÃüÁîÀ´ÖÕÖ¹½ø³Ì£º kill PID ĬÈÏÇé¿öÏ£¬`kill`·¢Ë͵ÄÊÇSIGTERM£¨ÐźÅ15£©£¬ÕâÊÇÒ»ÖÖÇëÇó³ÌÐòÕý³£ÖÕÖ¹µÄÐźÅ
´ó¶àÊýJavaÓ¦ÓÃÄܹ»ÓÅÑŵش¦ÀíÕâ¸öÐźţ¬ÊÍ·Å×ÊÔ´²¢ÓÐÐòµØ¹Ø±Õ
µ«ÊÇ£¬Èç¹ûÓ¦ÓÃûÓÐÏìÓ¦£¬¿ÉÒÔʹÓÃ`-9`Ñ¡Ïî·¢ËÍSIGKILLÐźÅÇ¿ÖÆÖÕÖ¹£º kill -9 PID ×¢Ò⣺ʹÓÃSIGKILLÇ¿ÖÆÖÕÖ¹½ø³Ì¿ÉÄܻᵼÖÂÊý¾Ý¶ªÊ§»ò²»Ò»Ö£¬ÒòΪӦÓÃûÓлú»áÖ´ÐÐÇåÀí²Ù×÷
Òò´Ë£¬Ó¦¾¡Á¿±ÜÃâʹÓÃ`-9`Ñ¡Ï³ý·ÇÈ·ÈÏûÓÐÆäËû°ì·¨¿ÉÒÔÓÅÑŵØÍ£Ö¹Ó¦ÓÃ
Èý¡¢¸üÓÅÑŵÄÍ£Ö¹·½Ê½£ºÍ¨¹ýÓ¦ÓÃÄÚ²¿»úÖÆ ³ýÁËÖ±½ÓÖÕÖ¹½ø³Ì£¬¸üÓÅÑŵÄ×ö·¨ÊÇÈÃÓ¦ÓÃ×ÔÉíÄܹ»ÏìӦֹͣÇëÇó
Õâͨ³£Éæ¼°ÒÔϼ¸¸ö·½Ã棺 1.ʵÏÖÐźŴ¦Àí£º JavaÓ¦ÓÿÉÒÔͨ¹ý²¶»ñSIGTERMµÈÐźÅÀ´Ö´ÐÐÌØ¶¨µÄÇåÀí²Ù×÷
ÀýÈ磬ʹÓÃ`Runtime.getRuntime().addShutdownHook()`Ìí¼ÓÒ»¸ö¹Ø±Õ¹³×Ó£¬µ±½ÓÊÕµ½SIGTERMÐźÅʱִÐУº ```java Runtime.getRuntime().addShutdownHook(newThread(()-> { // ÇåÀí×ÊÔ´¡¢¹Ø±ÕÊý¾Ý¿âÁ¬½ÓµÈ System.out.println(Ó¦ÓÃÕýÔÚÓÅÑŵعرÕ...); })); ``` 2.Ìṩ¹ÜÀí½Ó¿Ú£º ΪӦÓÃÌṩһ¸öRESTful API»ò¹ÜÀí¶Ëµã£¬ÔÊÐíÍⲿϵͳͨ¹ýHTTPÇëÇó´¥·¢¹Ø±Õ²Ù×÷
ÕâÑù£¬Äã¿ÉÒÔͨ¹ýcurl»òÆäËûHTTP¿Í»§¶Ë·¢ËÍÇëÇóÀ´Í£Ö¹Ó¦Ó㬶ø²»ÊÇÖ±½Ó²Ù×÷½ø³Ì
```bash curl -X POST http://localhost:8080/shutdown ``` ÔÚÓ¦ÓÃÖУ¬ÐèÒª¼àÌýÕâ¸ö¶Ëµã²¢´¦Àí¹Ø±ÕÇëÇó£¬È·±£Ö´ÐбØÒªµÄÇåÀí²½Öè
3.ʹÓÃSpring BootµÈ¿ò¼ÜµÄÄÚÖù¦ÄÜ£º Èç¹ûÄãʹÓõÄÊÇSpring BootµÈÏÖ´úJava¿ò¼Ü£¬ËüÃÇͨ³£ÌṩÁËÄÚÖõÄÓÅÑÅÍ£»úÖ§³Ö
Spring BootÓ¦ÓÿÉÒÔͨ¹ý`/actuator/shutdown`¶Ëµã£¨ÐèÒªÆôÓã©À´´¥·¢¹Ø±Õ£¬Ç°ÌáÊÇÓ¦ÓÃÒÔÕýÈ·µÄ·½Ê½ÅäÖò¢ÔËÐÐ
```bash curl -X POST http://localhost:8080/actuator/shutdown ``` ×¢Ò⣬´ÓSpring Boot 2.3¿ªÊ¼£¬³öÓÚ°²È«¿¼ÂÇ£¬Ä¬ÈϵĹرն˵ãÒѱ»½ûÓã¬ÐèҪͨ¹ýÅäÖÿªÆô²¢ÉèÖÃÊʵ±µÄȨÏÞ¿ØÖÆ
ËÄ¡¢Ê¹Ó÷þÎñ¹ÜÀí¹¤¾ß ÔÚLinuxϵͳÉÏ£¬»¹¿ÉÒÔÀûÓÃsystemdµÈ·þÎñ¹ÜÀí¹¤¾ßÀ´¹ÜÀíJARÓ¦ÓÃµÄÆô¶¯ºÍÍ£Ö¹
ͨ¹ý´´½¨Ò»¸ösystemd·þÎñµ¥ÔªÎļþ£¬Äã¿ÉÒÔ·½±ãµØ¿ØÖÆÓ¦ÓõÄÔËÐÐ״̬
1.´´½¨systemd·þÎñµ¥ÔªÎļþ£º ÔÚ`/etc/systemd/system/`Ŀ¼Ï´´½¨Ò»¸öеķþÎñÎļþ£¬ÀýÈç`myapp.service`£º `