我正在使用 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
服务如下所示。您还可以将所有环境变量放入可以使用服务
EnvironmentFile
中的选项读取的文件中systemd
。另一种选择是为您的二进制文件制作一个包装脚本并从服务中
ros
调用该包装脚本。systemd
该脚本需要是可执行的。为确保这一点,运行创建该文件后。
请注意,您需要
systemctl daemon-reload
在编辑服务文件后运行才能使更改生效。要在系统启动时启用该服务,您必须输入systemctl enable ros
.我对
roscore
二进制文件不熟悉,可能需要Type=
从simple
(这是默认设置,通常不需要)更改forking
为前两个示例中的。对于正常登录,您可以复制或符号链接
/opt/ros/kinetic/setup.bash
到/etc/profile.d/ros.sh
,这应该来自正常登录。你可以试试这个