Ebyte E32 Lora Module - systemd service
The e32
program is intended to be run as a service in the backround with communication through sockets. This way you can write software in any langauge and just have to deal with the easy job of reading and writing to a socket. Once the e32
service is started and running it can be accessed at any time by a client. In this post we’ll document the actual systemd service. We have some client examples demonstrating clients interfacing with the socket.
Using the Service
If you take the normal installation steps it’s already setup.
$ ./configure
$ make
$ sudo make install
From here you just need to:
$ systemctl daemon-reload
$ systemctl start e32
$ systemctl status e32
Now, you should see the following sockets. These come from the ExecStart
line in the e32.service
file shown below.
# file /run/e32.control
/run/e32.control: socket
# file /run/e32.data
/run/e32.data: socket
# ls -l /run/e32.data
srw-rw---- 1 root dialout 0 Jul 23 15:07 /run/e32.data
# ls -l /run/e32.control
srw-rw---- 1 root dialout 0 Jul 23 15:08 /run/e32.control
Note, the permissions of these sockets. The e32
process and the client needs ability to read and write to and from these sockets.
Service Definition
The autotools package will install the service files on a sudo make install
, there is no need to do anything. The service that is created is called e32
. Here are the contents for reference. The service runs the e32
in daemon mode using the --daemon
flag.
[Unit]
Description=ebyte e32 systemd service
[Service]
Type=forking
PIDFile=/run/e32.pid
ExecStartPre=stat /dev/serial0
ExecStartPre=/usr/local/bin/e32 --reset
ExecStart=/usr/local/bin/e32 -v --daemon --sock-unix-data /run/e32.data --sock-unix-ctrl /run/e32.control
ExecStartPost=chown --reference=/dev/serial0 /run/e32.data /run/e32.control
ExecStartPost=chmod --reference=/dev/serial0 /run/e32.data /run/e32.control
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
When we do a sudo make install
the services are already installed for us.
$ sudo make install
...
/bin/mkdir -p '/lib/systemd/system'
/usr/bin/install -c -m 644 e32.service e32tx.timer e32tx.service '/lib/systemd/system'
...
$
Service status
We can see the status like any normal service.
root@raspberrypi:/home/pi# systemctl status e32
$ systemctl status e32
● e32.service - ebyte e32 systemd service
Loaded: loaded (/lib/systemd/system/e32.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2021-07-28 16:44:09 MDT; 4h 40min ago
Process: 19141 ExecStartPre=/usr/bin/stat /dev/serial0 (code=exited, status=0/SUCCESS)
Process: 19142 ExecStartPre=/usr/local/bin/e32 --reset (code=exited, status=0/SUCCESS)
Process: 19144 ExecStart=/usr/local/bin/e32 -v --daemon --sock-unix-data /run/e32.data --sock-uni
Process: 19147 ExecStartPost=/usr/bin/chown --reference=/dev/serial0 /run/e32.data /run/e32.contr
Process: 19148 ExecStartPost=/usr/bin/chmod --reference=/dev/serial0 /run/e32.data /run/e32.contr
Main PID: 19146 (e32)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/e32.service
└─19146 /usr/local/bin/e32 -v --daemon --sock-unix-data /run/e32.data --sock-unix-ctrl /
We can also view the journal:
# journalctl -u e32
-- Logs begin at Mon 2021-07-12 16:23:49 MDT, end at Sun 2021-07-18 07:19:40 MDT
Jul 15 17:27:47 raspberrypi systemd[1]: Starting ebyte e32 systemd service...
Transfer Files using the Socket
Now we can have a client send data over the socket.