Yve*_*ves 25 environment-variables systemd
我正在使用 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,它会起作用吗?
Tho*_*mas 43
正常情况下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
Run Code Online (Sandbox Code Playgroud)
您还可以将所有环境变量放入一个文件中,该文件可以使用服务中的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
Run Code Online (Sandbox Code Playgroud)
另一种选择是为您的ros二进制文件制作一个包装脚本,并从systemd服务中调用该包装脚本。脚本必须是可执行的。为了确保,运行
chmod 755 /opt/ros/kinetic/bin/roscore.startup
Run Code Online (Sandbox Code Playgroud)
创建该文件后。
[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
Run Code Online (Sandbox Code Playgroud)
请注意,您需要systemctl daemon-reload在编辑服务文件后运行才能使更改生效。要在系统启动时启用该服务,您必须输入systemctl enable ros.
我不熟悉roscore二进制文件,可能有必要Type=从simple(这是默认值,通常不需要)更改forking为前两个示例。
对于普通登录,您可以复制或符号链接/opt/ros/kinetic/setup.bash到/etc/profile.d/ros.sh,这应该来自普通登录。
| 归档时间: |
|
| 查看次数: |
68578 次 |
| 最近记录: |