Create systemd service — daemon (Ubuntu 15+)
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
Originally published at https://whyboobo.com/webservice/setup-custom-service-ubuntu/ on February 18, 2018.