У меня есть служба с этим для дополнительного устройства, и я продолжаю получать сообщение об ошибке: [/run/fleet/units/tomcat-discovery@1.service:11] Конечный мусор, игнорирование. tomcat-discovery@1.service не имеет параметра ExecStart =, который разрешен только для служб RemainAfterExit = yes. Отказ.
Похоже, я пробовал все возможные комбинации, которые только мог придумать, и без проблем протестировал команду с терминала. Если я удалю первый вызов 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'