Normalement, les systemdservices 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 systemdservice, vous avez différentes possibilités.
Les exemples suivants supposent que roscoreest à /opt/ros/kinetic/bin/roscorecar les systemdservices doivent avoir le binaire ou le script configuré avec un chemin d'accès complet.
Une possibilité est d'utiliser l' Environmentoption dans votre systemdservice et un systemdservice 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 EnvironmentFileoption dans le systemdservice.
[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 rosbinaire et d'appeler ce script wrapper à partir du systemdservice. Le script doit être exécutable pour garantir son exécution chmod +755 /opt/ros/kinetic/bin/roscore.startupaprè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-reloadaprè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 roscorebinaire et il pourrait être nécessaire de passer Type=de simple(qui est la valeur par défaut et normalement non nécessaire) à forkingdans 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.servicehériter de ces variables d'environnement?