相关疑难解决方法(0)

将环境变量从当前 shell 传递到 systemd 单元

我正在尝试将当前 shell 中定义的环境变量传递给systemd我正在编写的单元之一。

DB_URL=databus.dev.mysite.io:8080
Run Code Online (Sandbox Code Playgroud)

我在作为服务运行的 python 脚本中使用它。我的systemd单位将把这个脚本作为一个单位运行,利用变量来工作。

[Unit]
Description=device-CompStatus: Computes device availability status
           
[Service]
Type=simple    
ExecStart=/usr/bin/bash -c "/usr/bin/python /opt/deviceCompStatus/deviceCompStatusHandler.py"
Restart=always
         
[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

在 Python 脚本中使用变量的方式是

if os.environ.get('DB_URL') is not None:
    dbEndPoint = "http://" + os.environ['DB_URL']
Run Code Online (Sandbox Code Playgroud)

问题是在systemd. 我查找了几个资源在 systemd 单元中使用环境变量,它说[Service]直接在下面使用赋值作为

[Service]
Environment=DB_URL=databus.dev.mysite.io:8080
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的机器DB_URL可能会根据我部署机器的环境而改变,它可能是开发人员,也可能是生产设置,其中 URL 会有所不同。

我如何动态地做到这一点?即传递任何可DB_URL用于systemd环境的值?

我还尝试使用该EnvironmentFile=选项来定义文件并将其传递给服务。但同样的问题,我的变量可能是动态的,不能硬编码。

更新

使用该选项后

systemctl import-environment DB_URL
Run Code Online (Sandbox Code Playgroud)

我能够看到systemd我确认的环境中可用的变量

systemctl show-environment
DB_URL=databus.dev.mysite.io:8080
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

但该值仍然没有反映在 …

environment-variables systemd

8
推荐指数
1
解决办法
2万
查看次数

systemd,EnvironmentFile,重用变量 - 如何?

我正在从新贵迁移到systemd。我在使用EnvironmentFile指令进行转换时遇到了一些麻烦。我无法让这个EnvironmentFile工作:

########################################################
# Catalina Settings
CLUSTER_BASE=/d01/tomcat/prod/xyz
CATALINA_BASE=$CLUSTER_BASE/1
CATALINA_TMPDIR=$CATALINA_BASE/temp
CATALINA_HOME=/usr/share/tomcat7
CATALINA_PID=/run/tomcat/tc-prod-xyz-1.pid

########################################################
# Java Settings
JAVA_HOME=/usr/lib/jvm/default-java/jre
JAVA_OPTS=-Djava.awt.headless=true
JAVA_OPTS=$JAVA_OPTS -server
JAVA_OPTS=$JAVA_OPTS -Xms2048m
JAVA_OPTS=$JAVA_OPTS -Xmx2048m
JAVA_OPTS=$JAVA_OPTS -XX:MaxPermSize=2048m
JAVA_OPTS=$JAVA_OPTS -XX:+UseParallelGC
JAVA_OPTS=$JAVA_OPTS -XX:+AggressiveHeap
JAVA_OPTS=$JAVA_OPTS -javaagent:$CLUSTER_BASE/newrelic/newrelic.jar
Run Code Online (Sandbox Code Playgroud)

看起来我在这种类型的语句中重用了一个变量:

JAVA_OPTS=$JAVA_OPTS -XX:+UseParallelGC
Run Code Online (Sandbox Code Playgroud)

systemd不像upstart那样支持它。systemd是否支持这样的东西,还是我需要做一个长而难以阅读的声明?

environment-variables systemd

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

environment-variables ×2

systemd ×2