Setup
Start by creating a file: /etc/systemd/system/CUSTOM_SERVICE_NAME.service
with the following content:
[Unit]
Description=CUSTOM_SERVICE_DESCRIPTION
[Service]
ExecStart=/opt/www/EXEC_FILE
WorkingDirectory=/opt/www
Restart=always
[Install]
WantedBy=multi-user.target
Enable the service. It will start automatically on boot, after that.
$ sudo systemctl enable CUSTOM_SERVICE_NAME.service
Check status/start/stop/restart
$ sudo systemctl {status|start|stop|restart} CUSTOM_SERVICE_NAME
A complete list with all available directives that can be used inside the service file can be found here
Legend
- CUSTOM_SERVICE_DESCRIPTION - a short description for the current service
- CUSTOM_SERVICE_NAME - the name of service
- EXEC_FILE - exec file name with the absolute path
Example 1 for a webservice written in Golang
You must have a new folder api
in the root /home/ubuntu/
. The main
file it’s the binary file resulted after go compilation. In my example I use flags to set environment --env=dev
, this is not mandatory.
[Unit]
Description= Go API Webservice Example
[Service]
ExecStart=/home/ubuntu/api/main --env=dev
WorkingDirectory=/home/ubuntu/api
Restart=always
[Install]
WantedBy=multi-user.target
Example 2 for a javascript
You must have create a web
folder into /home/ubuntu/
root folder. The npm must be installed before and use the absolute path in ExecStart
command, as you can see in the below example /usr/bin/npm
.
[Unit]
Description=Javascript Web Application Example
[Service]
ExecStart=/usr/bin/npm run start
WorkingDirectory=/home/ubuntu/web/
Restart=always
[Install]
WantedBy=multi-user.target
Usefull command
$ service --status-all
- display all services
- [ + ] for running services
- [ - ] for stopped services
- [ ? ] for services without a ‘status’ command