Saya menggunakan CoreOS untuk menjadwalkan unit systemd dengan armada. Saya memiliki dua unit ( firehose.service
dan firehose-announce.service
. Saya mencoba firehose-announce.service
untuk memulai dan berhenti bersama dengan firehose.service
. Ini adalah file unit untuk 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
Saya mencoba menggunakan BindsTo
dengan gagasan bahwa mulai dan berhenti firehose.service
juga akan mulai atau berhenti firehose-announce.service
. Tetapi ini tidak pernah terjadi dengan benar. Jika firehose.service
dihentikan, maka firehose-announce.service
masuk ke kondisi gagal. Tetapi ketika saya mulai firehose.service
, firehose-announce.service
itu tidak memulai.
Apa yang saya lakukan salah di sini?
Jawaban:
Sepertinya saya akhirnya menemukan kombinasi yang tepat untuk membuat ini berfungsi seperti yang diinginkan.
Di
firehose-announce.service
unit saya, saya hanya mengatur aBindsTo
. Seluruh unit adalah:Ini akan menyebabkan
firehose-announce.service
unit berhenti ketikafirehose.service
itu. Besar. Tapi bagaimana kita memulainya lagi?Saya membalik ketergantungan untuk berada di
firehose.service
unit saya seperti:Ini mengatakan bahwa
firehose.service
inginfirehose-announce.service
memulai ketika itu terjadi (tapi jangan gagal jikafirehose-announce.service
tidak bisa memulai). Itu juga memastikanfirehose.service
dimulai sebelumnyafirehose-announce.service
.Saya menguji ini dan unit sekarang tampaknya berhenti dan mulai bersama seperti yang diinginkan.
sumber
-
tidak melayani tujuan pada yang terakhir dan hanya melayani tujuan pada semua kecuali ExecStartPre terakhir