অন্যটির সাথে সিস্টেমড ইউনিট কীভাবে শুরু করবেন এবং বন্ধ করবেন?


20

আমি বহর সহ সিস্টেমড ইউনিটগুলির শিডিয়ুল করতে CoreOS ব্যবহার করছি। আমার দুটি ইউনিট রয়েছে ( 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

আমি BindsToএই ধারণার সাথে ব্যবহার করার চেষ্টা করছি যে শুরু এবং বন্ধ হওয়া firehose.serviceশুরু হবে বা বন্ধ হবে firehose-announce.service। তবে এটি কখনই সঠিকভাবে ঘটে না। যদি firehose.serviceবন্ধ করা হয়, তবে firehose-announce.serviceব্যর্থ অবস্থায় যায়। কিন্তু আমি যখন শুরু firehose.service, firehose-announce.serviceআরম্ভ করা হয় না।

আমি এখানে কি ভুল করছি?


এখানেও একই সমস্যা। আপনি কি সমাধান খুঁজে পেয়েছেন?
নাহিমে

উত্তর:


24

এই কাজটি পছন্দসই হিসাবে পেতে শেষ পর্যন্ত আমি সঠিক সংমিশ্রণে হোঁচট খেয়েছি বলে মনে হচ্ছে।

আমার 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

এর ফলে 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

এটি বলছে যে এটি শুরু হয়ে গেলে এটি শুরু করতে firehose.serviceচায় firehose-announce.service(তবে firehose-announce.serviceশুরু করতে না পারলে ব্যর্থ হবে না )। এটি নিশ্চিত করে যে এটি firehose.serviceআগে শুরু হয় firehose-announce.service

আমি এটি পরীক্ষা করেছি এবং ইউনিটগুলি এখন থামতে এবং পছন্দ হিসাবে একসাথে শুরু বলে মনে হচ্ছে।


দুর্দান্ত, আমি চেষ্টা করব
নাহিমে

1
স্পষ্টতই, ওয়ান্টস = অর্থ alচ্ছিক। প্রয়োজন = একটি প্রয়োজনীয়তা। BindsTo এর অর্থ যদি নির্ভরতা অর্থাৎ ফায়ার হজ-পরিষেবা বন্ধ হয়ে যায় তবে ফায়ার হুজ-ঘোষণা পরিষেবাটিও বন্ধ করে বিবেচিত হয়। আমার কাছে ভাল জিনিস লাগছে।
ম্যাট

ফায়ারহাউস.সার্ভিস স্পর্শ না করে এই আচরণ করা সম্ভব?
বন্ধু 123

আমি এই সমাধানটি চেষ্টা করেছিলাম, তবে একটি সমস্যার মধ্যে দিয়ে যাচ্ছি। আমার কাছে প্রয়োজনীয়তাগুলির সাথে বি। পরিষেবা এবং বি বিন্ডসটো = এ। সার্ভিস বি সহ পরিষেবা বি রয়েছে। যখন এ অস্বাভাবিকভাবে প্রস্থান করে, আমি দেখি এ এবং বি উভয়ই আবার শুরু হয়ে গেছে। কিন্তু যখন কোড 0 / SUCESS দিয়ে বের হয়, উভয়ই বন্ধ অবস্থায় থাকে
বাগ কিলার

এক্সিকিস্টার্টপ্রে = {ড্যাশ s -এর শেষটি কোনও উদ্দেশ্যেই কাজ করে না এবং কেবলমাত্র শেষ নির্বাহী স্টার্টপ্রে
মেফেক্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.