mirror of
https://github.com/OpenMTC/OpenMTC.git
synced 2024-12-29 09:19:01 +00:00
53 lines
3.8 KiB
Markdown
53 lines
3.8 KiB
Markdown
|
# OpenMTC systemd integration
|
|||
|
In addition to SysV init scripts, OpenMTC is providing ready-to-use service files for the [systemd](https://freedesktop.org/wiki/Software/systemd/) init system.
|
|||
|
|
|||
|
> **ℹ️ Hint:** As OpenMTC does not require privileged ports in order to function, it can be safely run from within a user's home directory. To do so, replace `sudo systemctl` with `systemctl --user`. It should bear mentioning that this is a convenience option for developers that is strongly discouraged for production.
|
|||
|
|
|||
|
## Installing Service Files
|
|||
|
Please refrain from copying or editing the provided files. Instead, change into the root of the openmtc repository and proceed as follows:
|
|||
|
```sh
|
|||
|
$ sudo systemctl link $(pwd)/openmtc-gevent/etc/systemd/system/openmtc-*.service
|
|||
|
```
|
|||
|
This should provide you with two new services in the systemd search path: `openmtc-gateway` and `openmtc-backend`. Confirm this by executing `sudo systemctl status openmtc-\*`.
|
|||
|
|
|||
|
## Adjusting `ExecStart`
|
|||
|
By default, the service files will assume to find the start scripts to be located in `/usr/local/bin`. Chances are, this may not be the case. This is how to adjust the service files properly:
|
|||
|
```sh
|
|||
|
$ sudo systemctl edit openmtc-gateway
|
|||
|
```
|
|||
|
An editor is going to open. Fill the presented file with the following content:
|
|||
|
```ini
|
|||
|
[Service]
|
|||
|
# Clear user and group
|
|||
|
User=
|
|||
|
Group=
|
|||
|
# This is needed to reset ExecStart before reassigning
|
|||
|
ExecStart=
|
|||
|
# Change to location on your system
|
|||
|
ExecStart=/opt/openmtc-gevent/bin/run-gateway
|
|||
|
```
|
|||
|
Save the file and exit the editor. Run `sudo systemctl daemon-reload` and verify the new value got picked up by executing `sudo systemctl show --property=ExecStart --no-pager openmtc-gateway `.
|
|||
|
|
|||
|
The procedure above is identical for the `openmtc-backend` component, safe for replacing `gateway` with `backend`.
|
|||
|
|
|||
|
## Controlling the Services
|
|||
|
Both, gateway and backend, can be started through `sudo systemctl start openmtc-gateway` and `sudo systemctl start openmtc-backend`, respectively. They can also be started in bulk via `sudo systemctl start openmtc-gateway openmtc-backend`. Execution order is not guaranteed, though.
|
|||
|
|
|||
|
If you always require the two services, it may be a good idea to add a dependency from the gateway to the backend as follows:
|
|||
|
```sh
|
|||
|
$ sudo systemctl add-requires openmtc-gateway.service openmtc-backend
|
|||
|
```
|
|||
|
> **⚠️ Caveat:** Please take note that the target unit name is fully specified. This is needed as systemd would otherwise assume you wanted to add a requirement to a *target*
|
|||
|
|
|||
|
Verify the dependency has been set in place by running `sudo systemctl list-dependencies openmtc-gateway` and checking if `openmtc-gateway.service` is listed. Starting the `openmtc-gateway` service will now also invoke `openmtc-backend`. Another benefit is that `openmtc-gateway` will be reloaded if `openmtc-backend` is.
|
|||
|
|
|||
|
Services can be shut down through `sudo systemctl stop` in the same fashion as `systemctl start`.
|
|||
|
|
|||
|
## Monitoring
|
|||
|
While `systemctl status` may reveal some log lines, more telling output generated by the services can be monitored through [`journalctl`](https://www.freedesktop.org/software/systemd/man/journalctl.html). `sudo journalctl -lf --unit openmtc-\*` should present a life feed of all running openmtc services.
|
|||
|
|
|||
|
> **ℹ️ Hint:** The road is a bit rough for those who run OpenMTC via systemd from their homedir, unfortunately. In theory, you should be good to go with `journalctl -lf --user --unit openmtc-\*`. But due to a lot of diversity in deployed systemd versions potentised by a wealth of different configurations, this may not do the trick. In that case, - under the assumption only a single instance of each, gateway and backend is running - the fastest way to success may be this:
|
|||
|
```sh
|
|||
|
$ sudo journalctl -lf _PID=$(ps ux | grep gateway_main.py | head -n1 | awk '{ print $2; }') + \
|
|||
|
_PID=$(ps ux | grep backend_main.py | head -n1 | awk '{ print $2; }')
|
|||
|
```
|