Normalmente i systemd
servizi hanno solo un insieme limitato di variabili d'ambiente e le cose in / etc / profile , /etc/profile.d e i file relativi a bashrc non sono impostati.
Per aggiungere variabili d'ambiente per un systemd
servizio hai diverse possibilità.
Gli esempi come segue per scontato che roscore
è alla /opt/ros/kinetic/bin/roscore
fin systemd
servizi devono avere il binario o script di configurato con un percorso completo.
Una possibilità è quella di utilizzare l' Environment
opzione nel tuo systemd
servizio e un systemd
servizio semplice sarebbe il seguente.
[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
È inoltre possibile inserire tutte le variabili di ambiente in un file che può essere letto con l' EnvironmentFile
opzione nel systemd
servizio.
[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
Un'altra opzione sarebbe quella di creare uno script wrapper per il tuo file ros
binario e chiamare quello script wrapper dal systemd
servizio. Lo script deve essere eseguibile, per garantire l'esecuzione chmod +755 /opt/ros/kinetic/bin/roscore.startup
dopo la creazione di quel file.
[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
Si noti che è necessario eseguire systemctl daemon-reload
dopo aver modificato il file di servizio per rendere attive le modifiche. Per abilitare il servizio all'avvio del sistema, è necessario accedere systemctl enable ros
.
Non ho familiarità con il roscore
binario e potrebbe essere necessario passare Type=
da simple
(che è l'impostazione predefinita e normalmente non necessaria) a forking
nei primi due esempi.
Aggiornamento , poiché ho dimenticato di menzionare le variabili di ambiente per i normali accessi.
Per gli accessi normali è possibile copiare o collegare simbolicamente /opt/ros/kinetic/setup.bash in /etc/profile.d/ros.sh che deve essere fornito con accessi normali.
my_own.service
, altri file di servizio che contengonoRequires=my_own.service
ereditano queste variabili ambientali?