Normalement, les systemd
services n'ont qu'un ensemble limité de variables d'environnement et les éléments dans / etc / profile , /etc/profile.d et les fichiers associés à bashrc ne sont pas définis.
Pour ajouter des variables d'environnement pour un systemd
service, vous avez différentes possibilités.
Les exemples suivants supposent que roscore
est à /opt/ros/kinetic/bin/roscore
car les systemd
services doivent avoir le binaire ou le script configuré avec un chemin d'accès complet.
Une possibilité est d'utiliser l' Environment
option dans votre systemd
service et un systemd
service simple serait le suivant.
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
Environment="One=1" "Three=3"
Environment="Two=2"
Environment="Four=4"
ExecStart=/opt/ros/kinetic/bin/roscore
[Install]
WantedBy=multi-user.target
Vous pouvez également mettre toutes les variables d'environnement dans un fichier qui peut être lu avec EnvironmentFile
option dans le systemd
service.
[root@localhost ~]# cat /etc/systemd/system/ros.env
One=1
Three=3
Two=2
Four=4
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
EnvironmentFile=/etc/systemd/systemd/ros.env
ExecStart=/opt/ros/kinetic/bin/roscore
[Install]
WantedBy=multi-user.target
Une autre option serait de créer un script wrapper pour votre ros
binaire et d'appeler ce script wrapper à partir du systemd
service. Le script doit être exécutable pour garantir son exécution chmod +755 /opt/ros/kinetic/bin/roscore.startup
après la création de ce fichier.
[root@localhost ~]# cat /opt/ros/kinetic/bin/roscore.startup
#!/bin/bash
source /opt/ros/kinetic/setup.bash
roscore
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
ExecStart=/opt/ros/kinetic/bin/roscore.startup
[Install]
WantedBy=multi-user.target
Notez que vous devez exécuter systemctl daemon-reload
après avoir modifié le fichier de service pour rendre les modifications actives. Pour activer le service sur systemboot, vous devez entrer systemctl enable ros
.
Je ne connais pas le roscore
binaire et il pourrait être nécessaire de passer Type=
de simple
(qui est la valeur par défaut et normalement non nécessaire) à forking
dans les deux premiers exemples.
Mise à jour , car j'ai oublié de mentionner les variables d'environnement pour les connexions normales.
Pour les connexions normales, vous pouvez copier ou créer un lien symbolique /opt/ros/kinetic/setup.bash vers /etc/profile.d/ros.sh qui doit provenir de connexions normales.
my_own.service
, les autres fichiers de service contenant peuvent-ilsRequires=my_own.service
hériter de ces variables d'environnement?