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
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
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:
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ả:
Để 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