Estou trabalhando com o ROS, que foi instalado corretamente no meu Ubuntu.
Para executar o ROS, temos que primeiro source /opt/ros/kinetic/setup.bash
executar o roscore
. Se eu executar roscore
sem source setup.bash
, o comando roscore
não pode ser encontrado.
Agora, quero executar o ROS enquanto o sistema inicializa.
Eu li este link: https://askubuntu.com/questions/814/how-to-run-scripts-on-start-up
Parece que eu só preciso criar um arquivo de serviço personalizado e colocá-lo em /etc/systemd/system/
. Mas ainda não tenho certeza do que fazer porque preciso source setup.bash
configurar algumas variáveis ambientais necessárias antes de executar o roscore
.
É possível definir variáveis ambientais no arquivo de serviço? Para minha necessidade, tenho que definir essas variáveis de ambiente não apenas para a execução, roscore
mas também para todo o sistema.
Eu tenho outra ideia, que é eu definir essas variáveis de ambiente /etc/profile
e escrever um arquivo de serviço apenas para o comando roscore
, vai funcionar?
Normalmente
systemd
, os serviços têm apenas um conjunto limitado de variáveis de ambiente, e as coisas em/etc/profile
,/etc/profile.d
ebashrc
arquivos relacionados não são definidos.Para adicionar variáveis de ambiente para um
systemd
serviço, você tem diferentes possibilidades.Os exemplos a seguir assumem que
roscore
está em/opt/ros/kinetic/bin/roscore
, poissystemd
os serviços devem ter o binário ou script configurado com um caminho completo.Uma possibilidade é usar a
Environment
opção em seusystemd
serviço e um serviço simplessystemd
seria o seguinte.Você também pode colocar todas as variáveis de ambiente em um arquivo que pode ser lido com a
EnvironmentFile
opção nosystemd
serviço.Outra opção seria fazer um script wrapper para seu
ros
binário e chamar esse script wrapper dosystemd
serviço. O script precisa ser executável. Para garantir isso, executedepois de criar esse arquivo.
Observe que você precisa executar
systemctl daemon-reload
depois de editar o arquivo de serviço para tornar as alterações ativas. Para habilitar o serviço na inicialização do sistema, você deve inserirsystemctl enable ros
.Não estou familiarizado com o
roscore
binário e pode ser necessário mudarType=
desimple
(que é o padrão e normalmente não é necessário) paraforking
os dois primeiros exemplos.Para logins normais, você pode copiar ou criar um link simbólico
/opt/ros/kinetic/setup.bash
para/etc/profile.d/ros.sh
, que deve ser originado em logins normais.você pode tentar com isso