Spring Boot and systemd go hand in hand to make running and controlling apps easy and efficient.
Basic Unit File
A systemd service is described using a unit file. Start by creating a unit file named
my-awesome-service.service with the following contents and locate it in the
/etc/systemd/system directory. From this point on, we can refer to our service as
my-awesome-service when issuing systemd commands. Feel free to name it whatever you want though and make sure you point your service to your actual app.
Without going into too much detail about systemd, suffice it to say you need at least the
[Unit] section to describe the service and its dependencies. The
[Service] section to tell systemd how to start the service. Finally the
[Install] section in order to enable the service to start at system boot.
Many additional settings exist that are beyond the scope of this tutorial. You can view this systemd reference for more details.
Controlling the Service with systemd
Starting the service is as easy as issuing the following command.
Restarting the service.
Stopping the service.
This command can be issued to tell systemd to start the service at system boot.
One of the things I like about running Spring Boot apps with systemd is I can worry even less about capturing the log output. In the past I would capture the logs in a log file. Using systemd, there is a built in logging journal where all services are logged. If I want to see the log output of a service, I simply issue the following command.
-f option tells journalctl to continue outputting entries that are added to the log. It’s identical to using the
-f option on the tail command. The
-u option is a filter that allows me to only see the log entries for the service name specified. Without this option, I would see the log output of all services currently running on the system.
In this short post, I showed you how you can quickly setup a Spring Boot app as a system service using systemd. If you have any suggestions, feel free to leave a comment below.