我正在使用 CoreOS 来调度 systemd 单元。我有两个单元 (firehose.service和firehose-announce.service。我试图让 与firehose-announce.service一起开始和停止firehose.service。这是 的单元文件firehose-announce.service:
[Unit]
Description=Firehose etcd announcer
BindsTo=firehose@%i.service
After=firehose@%i.service
Requires=firehose@%i.service
[Service]
EnvironmentFile=/etc/environment
TimeoutStartSec=30s
ExecStartPre=/bin/sh -c 'sleep 1'
ExecStart=/bin/sh -c "port=$(docker inspect -f '{{range $i, $e := .NetworkSettings.Ports }}{{$p := index $e 0}}{{$p.HostPort}}{{end}}' firehose-%i); echo -n \"Adding socket $COREOS_PRIVATE_IPV4:$port/tcp to /firehose/upstream/firehose-%i\"; while netstat -lnt | grep :$port >/dev/null; do etcdctl set /firehose/upstream/firehose-%i $COREOS_PRIVATE_IPV4:$port --ttl 300 >/dev/null; sleep 200; done"
RestartSec=30s
Restart=on-failure
[X-Fleet]
X-ConditionMachineOf=firehose@%i.service
Run Code Online (Sandbox Code Playgroud)
我试图使用BindsTostart 和 stop 也firehose.service将 start 或 stop 的概念firehose-announce.service。但这永远不会正确发生。如果firehose.service停止,则firehose-announce.service进入失败状态。但是当我启动时firehose.service,firehose-announce.service它没有启动。
我在这里做错了什么?
And*_*inn 27
我似乎终于偶然发现了正确的组合以使它按预期工作。
在我的firehose-announce.service单位中,我只设置了一个BindsTo. 整个单元是:
[Unit]
Description=Firehose etcd announcer
BindsTo=firehose@%i.service
[Service]
EnvironmentFile=/etc/environment
TimeoutStartSec=30s
ExecStartPre=/bin/sh -c 'sleep 1'
ExecStart=/bin/sh -c "port=$(docker inspect -f '{{range $i, $e := .NetworkSettings.Ports }}{{$p := index $e 0}}{{$p.HostPort}}{{end}}' firehose-%i); echo -n \"Adding socket $COREOS_PRIVATE_IPV4:$port/tcp to /firehose/upstream/firehose-%i\"; while netstat -lnt | grep :$port >/dev/null; do etcdctl set /firehose/upstream/firehose-%i $COREOS_PRIVATE_IPV4:$port --ttl 300 >/dev/null; sleep 200; done"
RestartSec=30s
Restart=on-failure
[X-Fleet]
X-ConditionMachineOf=firehose@%i.service
Run Code Online (Sandbox Code Playgroud)
这将导致firehose-announce.service设备在停止时停止firehose.service。伟大的。但是我们如何重新启动它呢?
我将依赖项反转到我的firehose.service单元中,如下所示:
[Unit]
Description=Firehose server
Wants=firehose-announce@%i.service
Before=firehose-announce@%i.service
[Service]
ExecStartPre=/usr/bin/docker pull firehose/server
ExecStartPre=-/usr/bin/docker rm -f firehose-%i
ExecStart=/usr/bin/docker run --name firehose-%i -p 7474 --env-file /home/core/firehose.env firehose/server
ExecStop=/usr/bin/docker rm -f firehose-%i
User=core
TimeoutStartSec=5m
TimeoutStopSec=20s
RestartSec=30s
Restart=on-failure
[Install]
WantedBy=multi-user.target
[X-Fleet]
X-Conflicts=firehose@*.service
Run Code Online (Sandbox Code Playgroud)
这是说当它启动时firehose.service想要firehose-announce.service启动(但如果firehose-announce.service不能启动也不要失败)。它还确保firehose.service在firehose-announce.service.
我对此进行了测试,现在这些单元似乎可以根据需要一起停止和启动。
| 归档时间: |
|
| 查看次数: |
20074 次 |
| 最近记录: |