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


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.