Normalmente, los systemdservicios 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 systemdservicio, tiene diferentes posibilidades.
Los siguientes ejemplos asumen que roscorees así /opt/ros/kinetic/bin/roscoreya que los systemdservicios deben tener el binario o script configurado con una ruta completa.
Una posibilidad es usar la Environmentopción en su systemdservicio y un systemdservicio 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 EnvironmentFileopción en el systemdservicio.
[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 rosbinario y llamar a ese script de contenedor desde el systemdservicio. El script debe ser ejecutable, para garantizar que se ejecute chmod +755 /opt/ros/kinetic/bin/roscore.startupdespué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-reloaddespué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 roscorebinario y podría ser necesario cambiar Type=de simple(que es el predeterminado y normalmente no es necesario) a forkinglos 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.serviceheredar estas variables ambientales?