如何在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,它将起作用吗?

汤玛士

正常情况下systemd的服务只有一组有限的环境变量,并在东西/etc/profile/etc/profile.dbashrc-相关文件设置。

要为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

您还可以将所有环境变量放入一个文件中,该文件可以通过EnvironmentFilesystemd服务中选项进行读取

[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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Python

如何在PyCharm中设置环境变量?

来自分类Python

如何在Tox中设置环境变量?

来自分类Python

如何在virtualenv中设置环境变量

来自分类Linux

如何在Pipenv中设置环境变量?

来自分类Python

如何在Jupyter Notebook中设置环境变量

来自分类Linux

如何在emacs中实际更改/设置环境变量

来自分类Java

如何在Netbeans中设置环境变量?

来自分类Java

如何在Glassfish 2.1中设置环境变量

来自分类Java

如何在春季测试中动态设置环境变量

来自分类Dev

如何在Makefile中设置子进程的环境变量

来自分类Dev

如何在詹金斯中设置环境变量?

来自分类Dev

如何在Python中设置和检索环境变量

来自分类Dev

如何在Meteor提供的服务器中设置环境变量?

来自分类Dev

如何在C#中永久设置环境变量

来自分类Dev

如何在Azure ARM模板中设置环境变量

来自分类Dev

如何在环境变量中设置数值

来自分类Dev

如何在Docker Compose中从服务器设置环境变量?

来自分类Dev

如何在React JS ..中设置环境变量?

来自分类Dev

Nginx:如何在服务器块中设置环境变量

来自分类Dev

如何在docker-compose中设置环境变量

来自分类Dev

如何在JavaScript中设置环境变量

来自分类Dev

如何在Azure中为App服务设置环境变量

来自分类Dev

如何在Helm图表中设置Java环境变量?

来自分类Dev

如何在AWS :: ElasticBeanstalk :: Environment中设置环境变量?

来自分类Dev

如何在gitlab ci中设置组环境变量

来自分类Dev

如何在Windows 10中设置系统环境变量?

来自分类Dev

在systemd服务文件中从sh脚本设置环境变量

来自分类Dev

如何在 .NET systemd 服务中设置环境变量?

来自分类Dev

如何在 Flask 中设置 Jinja 环境变量?

Related 相关文章

热门标签

归档