Normalerweise haben systemdDienste 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 systemdDienst hinzuzufügen , haben Sie verschiedene Möglichkeiten.
Die Beispiele folgt als davon ausgehen , dass roscorebei ist , /opt/ros/kinetic/bin/roscoreda systemdDienste des binären oder Skript konfiguriert , um mit einem vollständigen Pfad haben.
Eine Möglichkeit besteht darin, die EnvironmentOption in Ihrem systemdDienst zu verwenden, und ein einfacher systemdDienst 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 EnvironmentFileOption im systemdDienst 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 rosBinärdatei zu erstellen und dieses Wrapper-Skript vom systemdDienst aufzurufen . Das Skript muss ausführbar sein, damit es chmod +755 /opt/ros/kinetic/bin/roscore.startupnach 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-reloadnachdem 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 roscoreBinä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.servicedie diese Umgebungsvariablen enthalten, diese Umgebungsvariablen erben?