Use Tango with systemd integration#
It is useful to be able to automate the process of starting the necessary parts of the Tango Control System. For this purpose, it is recommended to create the system services.
In the case where Tango has been installed from a .deb package or is running in a Docker container, the package or the image provides thses services.
However, if Tango has been installed from scratch then the services and daemon have to be created manually.
There are a few server-side elements of the Tango environment that will want to be started in this way.
Tango DB Service#
Create a service to start the MariaDB database. This can be done by creating a file named tango-db.service under the /etc/systemd/system/
directory. An example of the contents of this file is shown below:
tango-db.service
# /etc/systemd/system/tango-db.service
[Unit]
Description = Tango DB
Requires=mariadb.service
After=mariadb.service
[Service]
User=<user>
Environment=TANGO_HOST=<tango_host:port>
Environment=MYSQL_USER=<mysql_user>
Environment=MYSQL_PASSWORD=<mysql_pwd>
ExecStart=<path/to/DataBaseds> 2 -ORBendPoint giop:tcp::10000
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=10
[Install]
WantedBy=tango.target
The above example starts MariaDB. If you are using a MySQL database then you will need to modify the above example with:
Requires=mysqld.service
After=mysqld.service
Replace:
<user>
: your username (e.g. tango)<tango_host:port>
: TANGO_HOST varible as IP:PORT (e.g. localhost:10000)<mysql_user>
: configured when setting up MariaDB/MySQL (e.g. root)<mysql_pwd>
: configured when setting up MariaDB/MySQL (e.g. tango)<path/to/DataBaseds>
: e.g. /usr/local/tango/bin/DataBaseds
To have this service start automatically at machine boot time, run the enable
command and then start
the service:
sudo systemctl enable tango-db
sudo systemctl start tango-db
Note
Note that if you later make changes to the .service file you will need to reload with:
sudo systemctl daemon-reload
Tango Access Control Service#
Create a service to start the Tango access control. This can be done by creating a file named tango-accesscontrol.service under the /etc/systemd/system/
directory. An example of the contents of this file is shown below:
tango-accesscontrol.service
# /etc/systemd/system/tango-accesscontrol.service
[Unit]
Description=TangoAccessControl device server
Wants=tango-db.service
After=tango-db.service
[Service]
Environment=TANGO_HOST=<tango_host:port>
Environment=MYSQL_USER=<mysql_user>
Environment=MYSQL_PASSWORD=<mysql_pwd>
ExecStart=<path/to/TangoAccessControl> 1
[Install]
WantedBy=tango.target
Replace:
<tango_host:port>
: TANGO_HOST varible as IP:PORT (e.g. localhost:10000)<mysql_user>
: configured when setting up MariaDB/MySQL (e.g. root)<mysql_pwd>
: configured when setting up MariaDB/MySQL (e.g. tango)<path/to/TangoAccessControl>
: e.g. /usr/local/tango/bin/TangoAccessControl
We also need to create a timer to make sure that the TangoDB is ready to accept requests before we start Tango access control. Create a file named tango-accesscontrol.timer under the /etc/systemd/system/
directory. An example of the contents of this file is shown below:
tango-accesscontrol.timer
# /etc/systemd/system/tango-accesscontrol.timer
[Timer]
OnActiveSec=3
[Install]
WantedBy=tango.target
To have this service and timer start automatically at machine boot time, run the enable
command and then start
the service:
sudo systemctl enable tango-accesscontrol
sudo systemctl enable tango-accesscontrol.timer
sudo systemctl start tango-accesscontrol
Note
Note that if you later make changes to these files you will need to reload with:
sudo systemctl daemon-reload
Tango Starter Service#
Create a service to start the Tango Starter. This can be done by creating a file named tango-starter.service under the /etc/systemd/system/
directory. An example of the contents of this file is shown below:
tango-starter.service
# /etc/systemd/system/tango-starter.service
[Unit]
Description=Starter device server
After=tango-accesscontrol.service
Requires=tango-db.service
Requires=tango-accesscontrol.service
[Service]
Restart=always
RestartSec=10
User=<user>
Environment=TANGO_HOST=<tango_host:port>
ExecStart=<path/to/Starter> <device>
[Install]
WantedBy=tango.target
Replace:
<user>
: your username (e.g. tango)<tango_host:port>
: TANGO_HOST varible as IP:PORT (e.g. localhost:10000)<path/to/Starter>
: e.g. /usr/local/tango/bin/Starter<device>
: name of the Starter device to start. See Use the Starter device on how to create this device.
We also need to create a timer to make sure that the TangoDB is ready to accept requests before we start the Tango Starter device. Create a file named tango-starter.timer under the /etc/systemd/system/
directory. An example of the contents of this file is shown below:
tango-starter.timer
# /etc/systemd/system/tango-starter.timer
[Timer]
OnActiveSec=3
[Install]
WantedBy=tango.target
To have this service and timer start automatically at machine boot time, run the enable
command and then start
the service:
sudo systemctl enable tango-starter
sudo systemctl enable tango-starter.timer
sudo systemctl start tango-starter
Note
Note that if you later make changes to these files you will need to reload with:
sudo systemctl daemon-reload
Combined single target#
Finally combine everything into a single target by creating a file named tango.target under the /etc/systemd/system/
directory. An example of the contents of this file is shown below:
tango.target
# /etc/systemd/system/tango.target
[Unit]
Description=Tango development environment target
Requires=tango-db.service
Requires=tango-starter.service
Requires=tango-accesscontrol.service
Requires=tango-accesscontrol.timer
Requires=tango-starter.timer
[Install]
WantedBy=multi-user.target
Start this target with the start
command:
sudo systemctl start tango.target
Defining Tango servers as systemd units#
It may be useful to create systemd units for specific Tango servers in production. Similar to the above examples create a file named device-server1.service under the /etc/systemd/system/
directory. An example of the contents of this file is shown below:
tango-server1.service
# /etc/systemd/system/tango-server1.service
[Unit]
Description=My Device Server
After=tango-accesscontrol.service
Requires=tango-db.service
Requires=tango-accesscontrol.service
[Service]
Restart=always
RestartSec=10
User=<user>
Environment=TANGO_HOST=<tango_host:port>
ExecStart=<path/to/device-class> <device>
[Install]
WantedBy=tango.target
Replace:
<user>
: your username (e.g. tango)<tango_host:port>
: TANGO_HOST varible as IP:PORT (e.g. localhost:10000)<path/to/device-class>
: e.g. for TangoTest this might be /usr/local/tango/bin/TangoTest<device>
: name of the device to start