Normalmente, los systemd
servicios solo tienen un conjunto limitado de variables de entorno y las cosas en / etc / profile , /etc/profile.d y los archivos relacionados con bashrc no están configurados.
Para agregar variables de entorno para un systemd
servicio, tiene diferentes posibilidades.
Los siguientes ejemplos asumen que roscore
es así /opt/ros/kinetic/bin/roscore
ya que los systemd
servicios deben tener el binario o script configurado con una ruta completa.
Una posibilidad es usar la Environment
opción en su systemd
servicio y un systemd
servicio simple sería el siguiente.
[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
También puede poner todas las variables de entorno en un archivo que se puede leer con EnvironmentFile
opción en el systemd
servicio.
[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
Otra opción sería crear un script de contenedor para su ros
binario y llamar a ese script de contenedor desde el systemd
servicio. El script debe ser ejecutable, para garantizar que se ejecute chmod +755 /opt/ros/kinetic/bin/roscore.startup
después de crear ese archivo.
[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
Tenga en cuenta que debe ejecutar systemctl daemon-reload
después de haber editado el archivo de servicio para que los cambios estén activos. Para habilitar el servicio en systemmboot, debe ingresar systemctl enable ros
.
No estoy familiarizado con el roscore
binario y podría ser necesario cambiar Type=
de simple
(que es el predeterminado y normalmente no es necesario) a forking
los dos primeros ejemplos.
Actualización , ya que olvidé mencionar las variables de entorno para los inicios de sesión normales.
Para inicios de sesión normales, puede copiar o vincular /opt/ros/kinetic/setup.bash a /etc/profile.d/ros.sh que debe obtenerse en inicios de sesión normales.
my_own.service
, ¿pueden otros archivos de servicio que contienenRequires=my_own.service
heredar estas variables ambientales?