CoreOS Systemd sidekick单元无法启动

我有一个服务与这个伙伴单位,并不断收到错误:[/run/fleet/units/[email protected]:11]尾随垃圾,忽略。 [email protected]没有ExecStart =设置,只允许RemainAfterExit = yes服务。 拒。

我似乎已经尝试了所有我能想到的不同的组合,并成功地从terminaltesting了命令而没有问题。 如果我删除了第一个调用etcdctl,第二个set命令也可以在服务文件中正常工作。 任何想法,我到哪里错了?

[Unit] Description=Tomcat web server etcd registration # Requirements Requires=etcd.service Requires=tomcat@%i.service # Dependency ordering and binding After=etcd.service After=tomcat@%i.service BindsTo=tomcat@%i.service [Service] # Get CoreOS environmental variables EnvironmentFile=/etc/environment # Start ExecStart=/bin/bash -c "\ while true; do \ etcdctl set /services/tomcat/tomcat-%i/ip ${COREOS_PRIVATE_IPV4}:$(docker inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' tomcat.%i) --ttl 180; \ etcdctl set /services/bind/tomcat-%i ${COREOS_PRIVATE_IPV4} --ttl 180; \ sleep 60; \ done" # Stop ExecStop=/usr/bin/etcdctl rm --recursive /services/tomcat/tomcat-%i [X-Fleet] # Schedule on the same machine as the associated Apache service MachineOf=tomcat@%i.service 

我能够通过在/ bin / bash -c命令周围使用单引号来纠正错误,使用–format周围的双引号和双重转义端口号。 最终完整的ExecStart命令是:

 ExecStart=/bin/bash -c '\ while true; do \ etcdctl set /services/tomcat/tomcat-%i/ip ${COREOS_PRIVATE_IPV4}:$(docker inspect --format="{{(index (index .NetworkSettings.Ports \\"8080/tcp\\") 0).HostPort}}" tomcat.%i) --ttl 180; \ etcdctl set /services/bind/tomcat-%i ${COREOS_PRIVATE_IPV4} --ttl 180; \ sleep 60; \ done'