bash – 这个变量如何在systemd单元文件中工作?
发布时间:2020-12-15 18:36:32 所属栏目:安全 来源:网络整理
导读:我有一个相当简单的单元文件,用于我在CoreOS上运行的服务器实例的发现sidekick服务.单元文件如下所示: [Unit]Description=Discovery for frontend server (instance %i)BindsTo=frontend@%i.serviceAfter=frontend@%i.service[Service]EnvironmentFile=/etc
我有一个相当简单的单元文件,用于我在CoreOS上运行的服务器实例的发现sidekick服务.单元文件如下所示:
[Unit] Description=Discovery for frontend server (instance %i) BindsTo=frontend@%i.service After=frontend@%i.service [Service] EnvironmentFile=/etc/environment ExecStart=/usr/bin/bash -c ' while true; do export PORT=$(docker port frontend%i 80 | sed s/.*://); etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:$PORT" --ttl 60; sleep 45; done' ExecStop=/usr/bin/etcdctl rm /services/frontend/%i [X-Fleet] MachineOf=frontend@%i.service 这很好,但是我花了很长时间才进入这个阶段,因为如果我将etcdctl行更改为: etcdctl set /services/frontend/%i "${COREOS_PRIVATE_IPV4}:${PORT}" --ttl 60; 然后它不起作用 – 它最终设置一个像100.45.218.3:的值,没有端口.一路上我花了很多时间玩$PORT变量的不同用法,我不知道为什么我选择的配置工作.有一次,我在剧本中有这个: echo hi $PORT; echo "hi $PORT"; echo hi ${PORT}; echo "hi ${PORT}"; 得到这样的日志日志: Aug 17 01:05:07 core-01 bash[53694]: hi 32769 Aug 17 01:05:07 core-01 bash[53694]: hi 32769 Aug 17 01:05:07 core-01 bash[53694]: hi Aug 17 01:05:07 core-01 bash[53694]: hi 基本上我的问题是:这里发生了什么?面对我理解{}在bash脚本中的工作方式.为什么我可以在COREOS_PRIVATE_IPV4变量上使用curlies(从/ etc / environment导出,但不是PORT?
这在
systemd.service(1)中有记录.${PORT}由systemd扩展.要将$传递给shell,您需要编写$$,所以$${PORT}.重要的是这个:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |