小编Kev*_*ner的帖子

可以在 systemd Environment 字段中使用脚本命令吗?

我有一个 docker-compose 文件,用于为我的服务启动多个容器。其中一个容器需要设置一个环境变量(准确地说是服务器的公共 ip)。操作系统是新安装的 Ubuntu 15.10 服务器虚拟机。

我正在尝试找到一种方法来为 systemd 提供此功能。到目前为止,我想出的最好的是:

[Unit]
Description=service for my product
Requires=docker.service
After=docker.service

[Service]
Environment=MY_MASTER_IP=`/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/'`
Environment=MY_NETWORK_NAME="mynetwork"

Restart=always
ExecStart=/usr/local/bin/docker-compose -f /app/master/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /app/master/docker-compose.yml stop

[Install]
WantedBy=local.target
Run Code Online (Sandbox Code Playgroud)

但是,当我使用systemd-analyze verify myapp.servicesystemd 时,它会通过告诉我带有 crazy shell 命令的行无效并将被忽略来做出响应。

[/lib/systemd/system/myapp.service:8] Invalid environment assignment, ignoring: MY_MASTER_IP=`/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/')` …
Run Code Online (Sandbox Code Playgroud)

environment-variables systemd

4
推荐指数
1
解决办法
4354
查看次数

为什么脚本的退出代码看起来与返回的值不同?

我有一个脚本(run-docker-container.sh)调用另一个脚本(create-docker-container.sh)。create-docker-container 针对 docker 远程 api 执行curl 脚本并返回 http 代码,如果成功则返回零。创建脚本因此返回

echo $RVAL
exit $RVAL
Run Code Online (Sandbox Code Playgroud)

在我的测试中, $RVAL 的值为 404,这是我对这个问题感兴趣的值。

在我的 run-docker-container 脚本中,我有以下几行

create-docker-container.sh $CONTAINER_NAME $CONTAINER_SETTINGS
rval=$?
echo $rval
if [ $rval -eq 404 ]; then
    ...
fi
Run Code Online (Sandbox Code Playgroud)

尽管 create 似乎以 404 退出,但我得到的值$?是 148,因此我的条件处理没有被调用。为什么会这样以及如何正确从脚本中获取退出代码?

bash shell-script exit exit-status

3
推荐指数
1
解决办法
2259
查看次数