Automatic start by using systemd: Difference between revisions

From Aquarium-Control
Jump to navigation Jump to search
No edit summary
No edit summary
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
The content of systemd unit file /lib/systemd/system/aquarium-ctrl.service as following:
The shell script for startup of the control application (<code>/usr/local/bin/aquarium_control_startup</code>) has the following content:
 
<code>
echo 0 > /var/local/aquarium-ctrl.pid
 
touch /dev/mqueue/aquarium_control.6UXp
 
chmod o+rwx /dev/mqueue/aquarium_control.6UXp
 
/usr/local/bin/aquarium_control > /dev/null&
 
</code>
 
It resets any PID in the lock file from previously instances which were potentially not shut down correctly (for example, in case of power failure).
It creates the message queue file which is not a file on the hard drive and sets permission accordingly.
Finally, it starts the control application in the background.
 
The content of systemd unit file <code>/lib/systemd/system/aquarium_control.service</code> as following:


<code>
<code>
Line 13: Line 30:
Type=forking
Type=forking


ExecStart=bash /usr/local/bin/aquarium-ctrl-startup.sh
ExecStart=bash /usr/local/bin/aquarium_control_startup
 


[Install]
[Install]
Line 23: Line 41:
Upon creation/modification of the unit file, one must run the command <code>sudo systemctl daemon-reload</code> in order to activate the changes.
Upon creation/modification of the unit file, one must run the command <code>sudo systemctl daemon-reload</code> in order to activate the changes.


For starting the control application manually via systemd, one can use the command <code>sudo systemctl start aquarium-ctrl</code>.
For starting the control application manually via systemd, one can use the command <code>sudo systemctl start aquarium_control_startup.sh</code>.


The startup script creates a set of POSIX message queues and sets their access rights before starting the control application to run in the background.
 
== Creating message queues for operation or test of aquarium_control ==
<code>
<code>
#!/bin/bash
# Creating message queues for operation or test of aquarium_control
sudo touch /dev/mqueue/aquarium_control.5UXp
sudo touch /dev/mqueue/aquarium_control.5UXp


Line 54: Line 69:


sudo chmod o+rwx /dev/mqueue/aquarium_control.9UXp
sudo chmod o+rwx /dev/mqueue/aquarium_control.9UXp
</code>


/usr/local/bin/aquarium_control > /dev/null&
Only one of the message queues is required for operating the control application. The other message queues are use for parallel SW unit testing.


== initialize lock file with zero as PID ==
<code>
sudo echo 0 > /var/local/aquarium-ctrl.pid
</code>
</code>


Only one of the message queues is required for operating the control application. The other message queues are use for parallel SW unit testing.
The lock file has to be initialised to zero upon restart of the server. A missing or empty lock file is interpreted by the control application that something has gone wrong and startup will be aborted. In case of uncontrolled shutdown (e.g. power failure), the PID of the last operation may still be in the lock file, hence a reset to zero is required for this case.
 
== start the application to run in the background ==
<code>
/usr/local/bin/aquarium_control > /dev/null&
</code>

Latest revision as of 09:54, 27 July 2025

The shell script for startup of the control application (/usr/local/bin/aquarium_control_startup) has the following content:

echo 0 > /var/local/aquarium-ctrl.pid

touch /dev/mqueue/aquarium_control.6UXp

chmod o+rwx /dev/mqueue/aquarium_control.6UXp

/usr/local/bin/aquarium_control > /dev/null&

It resets any PID in the lock file from previously instances which were potentially not shut down correctly (for example, in case of power failure). It creates the message queue file which is not a file on the hard drive and sets permission accordingly. Finally, it starts the control application in the background.

The content of systemd unit file /lib/systemd/system/aquarium_control.service as following:

[Unit]

Description=Aquarium Control Application

After=multi-user.target


[Service]

Type=forking

ExecStart=bash /usr/local/bin/aquarium_control_startup


[Install]

WantedBy=multi-user.target


Upon creation/modification of the unit file, one must run the command sudo systemctl daemon-reload in order to activate the changes.

For starting the control application manually via systemd, one can use the command sudo systemctl start aquarium_control_startup.sh.


Creating message queues for operation or test of aquarium_control

sudo touch /dev/mqueue/aquarium_control.5UXp

sudo chmod o+rwx /dev/mqueue/aquarium_control.5UXp

sudo touch /dev/mqueue/aquarium_control.4UXp

sudo chmod o+rwx /dev/mqueue/aquarium_control.4UXp

sudo touch /dev/mqueue/aquarium_control.6UXp

sudo chmod o+rwx /dev/mqueue/aquarium_control.6UXp

sudo touch /dev/mqueue/aquarium_control.7UXp

sudo chmod o+rwx /dev/mqueue/aquarium_control.7UXp

sudo touch /dev/mqueue/aquarium_control.8UXp

sudo chmod o+rwx /dev/mqueue/aquarium_control.8UXp

sudo touch /dev/mqueue/aquarium_control.9UXp

sudo chmod o+rwx /dev/mqueue/aquarium_control.9UXp

Only one of the message queues is required for operating the control application. The other message queues are use for parallel SW unit testing.

initialize lock file with zero as PID

sudo echo 0 > /var/local/aquarium-ctrl.pid

The lock file has to be initialised to zero upon restart of the server. A missing or empty lock file is interpreted by the control application that something has gone wrong and startup will be aborted. In case of uncontrolled shutdown (e.g. power failure), the PID of the last operation may still be in the lock file, hence a reset to zero is required for this case.

start the application to run in the background

/usr/local/bin/aquarium_control > /dev/null&