Normalerweise haben systemd
Dienste nur einen begrenzten Satz von Umgebungsvariablen und Dinge in / etc / profile , /etc/profile.d und bashrc- bezogenen Dateien sind nicht festgelegt.
Um Umgebungsvariablen für einen systemd
Dienst hinzuzufügen , haben Sie verschiedene Möglichkeiten.
Die Beispiele folgt als davon ausgehen , dass roscore
bei ist , /opt/ros/kinetic/bin/roscore
da systemd
Dienste des binären oder Skript konfiguriert , um mit einem vollständigen Pfad haben.
Eine Möglichkeit besteht darin, die Environment
Option in Ihrem systemd
Dienst zu verwenden, und ein einfacher systemd
Dienst wäre wie folgt.
[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
Sie können auch alle Umgebungsvariablen in eine Datei einfügen, die mit der EnvironmentFile
Option im systemd
Dienst gelesen werden kann .
[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
Eine andere Möglichkeit wäre, ein Wrapper-Skript für Ihre ros
Binärdatei zu erstellen und dieses Wrapper-Skript vom systemd
Dienst aufzurufen . Das Skript muss ausführbar sein, damit es chmod +755 /opt/ros/kinetic/bin/roscore.startup
nach dem Erstellen dieser Datei ausgeführt werden kann.
[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
Beachten Sie, dass Sie ausgeführt werden müssen, systemctl daemon-reload
nachdem Sie die Servicedatei bearbeitet haben, um die Änderungen zu aktivieren. Um den Dienst beim Systemstart zu aktivieren, müssen Sie eingeben systemctl enable ros
.
Ich bin mit der roscore
Binärdatei nicht vertraut und es kann erforderlich sein , in den ersten beiden Beispielen Type=
von simple
(dies ist die Standardeinstellung und wird normalerweise nicht benötigt) zu wechseln forking
.
Update , da ich vergessen habe, die Umgebungsvariablen für die normalen Anmeldungen zu erwähnen.
Für normale Anmeldungen könnten Sie oder Symlink kopieren /opt/ros/kinetic/setup.bash zu /etc/profile.d/ros.sh , die auf normalen Anmeldungen bezogen werden sollte.
my_own.service
, können andere Servicedateien,Requires=my_own.service
die diese Umgebungsvariablen enthalten, diese Umgebungsvariablen erben?