Chạy file jar giống như một service trên Ubuntu (Linux)

Chạy file jar giống như một service trên Ubuntu (Linux).

Trong bài này chúng ta sẽ thực hiện chạy 1 ứng dụng java (file .jar) trên ubuntu giống như 1 service (chạy ngầm). Tức là chúng ta có thể start, stop nó giống như 1 service hay có thể thể lựa chọn khởi động cùng hệ thống, xem log …

Giả sử mình có 1 file jar là spring-boot-hello.jar nằm trong folder /home/cuongth/workspace . Bây giờ mình sẽ thực hiện chạy file jar này giống như 1 service.

Bước 1: Tạo một service

Ở đây mình sẽ tạo 1 service với tên là spring-boot-hello. Do đó mình cần tạo file spring-boot-hello.service trong folder /etc/systemd/system với nội dung sau:

[Unit]
Description=Demo Spring Boot Hello
[Service]
User=cuongth
# The configuration file application.properties should be here:

#change this to your workspace
WorkingDirectory=/home/cuongth/workspace

#path to executable.
#executable is a bash script which calls jar file
ExecStart=/bin/bash /home/cuongth/workspace/spring-boot-hello.sh
SuccessExitStatus=143

TimeoutStopSec=10
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Trong đó:

  • Description: mô tả service
  • User: user dùng để chạy service
  • ExecStart: lệnh chạy script (ở đây mình chạy file bash ở vị trí: /home/cuongth/workspace/spring-boot-hello)

Để tạo file trên các bạn có thể dùng lệnh vi, rồi copy nội dung trên vào là được. (hoặc dùng text editor như nano, gedit…)

sudo vi /etc/systemd/system/spring-boot-hello.service

Bước 2: Tạo Script chạy file jar

/opt/java/jdk1.8.0_241/bin/java -jar spring-boot-hello.jar

Ở đây mình dùng lệnh java để chạy file spring-boot-hello.jar, hiện trên máy mình đang cài java ở folder /opt/java/jdk1.8.0_241. Các bạn sửa lại thành folder chứa java trên máy của các bạn là ok.

Cấp quyền thực thi cho file script:

sudo chmod +x spring-boot-hello.sh

Chạy file jar giống như một service trên Ubuntu (Linux)

Bước 3: Chạy service

sudo systemctl daemon-reload
sudo systemctl enable spring-boot-hello.service
sudo systemctl start spring-boot-hello
sudo systemctl status spring-boot-hello

 Chạy file jar giống như một service trên Ubuntu (Linux)

Trong file spring-boot-hello.jar của mình là 1 web app đã nhúng sẵn tomcat và chạy trên port 8081, sau khi start service thì truy cập đường dẫn http://localhost:8081 sẽ có kết quả như sau:

Chạy file jar giống như một service trên Ubuntu (Linux)

Bước 4: Xem log

Để xem log của service ta dùng lệnh sau:

 

sudo journalctl --unit=my-webapp . See real-time logs by using the -f option.

If you want to trim them, use -n <# of lines> to view the specified number of lines of the log:

sudo journalctl -f -n 1000 -u spring-boot-hello

Trong đó:

  • -f: xem log realtime (log thay đổi gì sẽ hiện ra luôn)
  • -n: hiển thị số dòng log từ thời điểm hiện tại về trước đó
  • -u: tên service

Kết quả:

Chạy file jar giống như một service trên Ubuntu (Linux)

Để stop lại service ta dùng lệnh:

sudo systemctl stop spring-boot-hello

Để không cho service khởi động cùng hệ thống ta dùng lệnh:

sudo systemctl disable spring-boot-hello.service

 

Okay, Done!

Download file spring-boot-hello.jar tại đây https://github.com/stackjava/spring-boot-hello

References:

https://dzone.com/articles/run-your-java-application-as-a-service-on-ubuntu

stackjava.com