我正在使用ROS,它已经正确安装在Ubuntu上。
要运行ROS,我们必须先source /opt/ros/kinetic/setup.bash
执行roscore
。如果我roscore
不执行source setup.bash
该命令,roscore
则找不到该命令。
现在,我想在系统启动时执行ROS。
我已阅读此链接:https : //askubuntu.com/questions/814/how-to-run-scripts-on-start-up
看来我只需要创建一个自定义服务文件并将其放入/etc/systemd/system/
。但是我仍然不确定该怎么做,因为我需要source setup.bash
在执行之前设置一些必要的环境变量roscore
。
是否可以在服务文件中设置环境变量?为了我的需要,我不仅要为执行roscore
系统设置这些环境变量,还要为整个系统设置这些环境变量。
我有另一个想法,那就是我设置了这些环境变量/etc/profile
并仅为该命令编写了一个服务文件roscore
,它将起作用吗?
正常情况下systemd
的服务只有一组有限的环境变量,并在东西/etc/profile
,/etc/profile.d
和bashrc
-相关文件设置。
要为systemd
服务添加环境变量,您有不同的可能性。
以下示例假定roscore
位于at /opt/ros/kinetic/bin/roscore
,因为systemd
服务必须将二进制文件或脚本配置为具有完整路径。
一种可能性是Environment
在您的systemd
服务中使用该选项,一个简单的systemd
服务如下。
[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
您还可以将所有环境变量放入一个文件中,该文件可以通过EnvironmentFile
该systemd
服务中的选项进行读取。
[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
另一个选择是为ros
二进制文件创建一个包装器脚本,然后从systemd
服务中调用该包装器脚本。该脚本必须是可执行的。为了确保这一点,运行
chmod 755 /opt/ros/kinetic/bin/roscore.startup
创建该文件后。
[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
请注意,您需要systemctl daemon-reload
在编辑服务文件后运行以使更改生效。要在systemboot上启用该服务,您必须输入systemctl enable ros
。
我对roscore
二进制文件不熟悉,可能有必要将其Type=
从simple
(这是默认值,通常是不需要的)更改forking
为前两个示例。
对于常规登录,您可以将复制或符号链接/opt/ros/kinetic/setup.bash
到/etc/profile.d/ros.sh
,该链接应来自常规登录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句