সিস্টেমড ইউনিট পরিষেবা পুনরায় আরম্ভ করা হয় যদি অন্য কোনও পরিষেবা শুরু হয় বা পুনরায় লোড হয়


16

সিস্টেমটি ইনস্টলড ও আপগ্রেড করা এডিট না করে যদি সম্ভব Systemdহয় তবে আরম্ভ করার A.service( After) B.serviceপুনরায় লোড করার সময় (কেবলমাত্র পুনরায় লোড কনফিগারেশন ) উপায় আছে কিনা তা আমি জানতে চাই B.service

A.serviceB.serviceইনস্টল, অক্ষম বা বন্ধ না থাকলেও শুরু করা উচিত ।

A.service:

[Unit]
After = B.service network-online.target
Wants = B.service

[Service]
Type=oneshot
ExecStart = /script.sh start
ExecStop = /script.sh stop
RemainAfterExit=yes

[Install]
WantedBy = network-online.target

B.service:

[Unit]
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/cmd start
ExecStop=/cmd stop
ExecReload=/cmd reload
PIDFile=/var/run/cmd.pid

[Install]
WantedBy=multi-user.target

উত্তর:


12

আপনি ব্যবহার করতে পারেন PartOfমধ্যে [Unit]অধ্যায়।

উদাহরণ: PartOf=B.service

ম্যান পৃষ্ঠা থেকে,

PartOf =

প্রয়োজনীয়তা = এর মতো নির্ভরতা কনফিগার করে তবে ইউনিটগুলি থামানো এবং পুনরায় চালু করতে সীমাবদ্ধ। যখন সিস্টেমডগুলি এখানে তালিকাবদ্ধ ইউনিটগুলি থামায় বা পুনরায় চালু করে, ক্রিয়াটি এই ইউনিটে প্রচার করা হয়। মনে রাখবেন যে এটি একমুখী নির্ভরতা - এই ইউনিটে পরিবর্তনগুলি তালিকাভুক্ত ইউনিটগুলিকে প্রভাবিত করে না।


ধন্যবাদ, আমি মধ্যে খুঁজছেন ছিল Overriding vendor settingsকিন্তু এই সৌন্দর্য আরও বেশি সহজ এবং প্রতিশ্রুতি, শুধুমাত্র excpetion আমি চাই না হয় Aযদি বন্ধ করতে Bস্টপ শুধু A.restartযদি B.startতারপর, যাহাই হউক না কেন আমি কিছু পরীক্ষা শীঘ্রই চেষ্টা করবো এবং সেখানে এটি পরিচালনা করার কিছু উপায় যদি দেখি, আপনাকে জানাতে হবে
অ্যালেক্স

@Alex: কি যদি আপনি ব্যবহার PartOfএবং Restart=alwaysএকসঙ্গে?
থিশি

আমি Restart=ডকুমেন্টেশন দেখছি, আমি oneshotপরিষেবাগুলির সাথে কী আচরণ করব তা নিশ্চিত নই , তবে নির্বিশেষে:, When the death of the process is a result of systemd operation (e.g. service stop or restart), the service will not be restartedআমি যদি সঠিকভাবে বুঝতে পারি তবে ম্যানুয়ালি বি থামানো বন্ধ হয়ে যাবে
অ্যালেক্স

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

@ অ্যালেক্স: ঠিক আছে, পয়েন্টগুলি আমার পক্ষে গুরুত্বপূর্ণ নয়। পয়েন্ট অর্জন করতে পারে এমন আরও অনেক উপায় রয়েছে। প্রদত্ত সমাধান আপনার সমস্যা সমাধান করে কিনা তা আমি কেবল জানতে চাই। যদি তা না হয় তবে আমরা এটিতে আরও কাজ করব। কিভাবে ব্যবহার PartOfকরে Restart=always? তুমি কি চেষ্টা করেছ?
থিশি

3

আমি উপর কোন নিয়ন্ত্রণ ছিল stopসঙ্গে PartOf=, এবং Aসঙ্গে বন্ধ না B, তাই আমি ব্যবহার শেষ পর্যন্ত উপেক্ষা বিক্রেতা সেটিংস কাজ বলে মনে হয়।

/etc/systemd/system/B.service.d/override.conf

[Service]
ExecStart=
ExecStart=/bin/sh -c '/cmd start || exit $?; sleep 5; [ -x /script.sh ] && /script.sh start; exit 0'
ExecReload=
ExecReload=/bin/sh -c '/cmd reload || exit $?; sleep 5; [ -x /script.sh ] && /script.sh start; exit 0'

/cmdবাস্তবায়ন অ্যাসিঙ্ক্রোনাস এবং একটি সংস্থান অ্যাক্সেস যা /script.shখুব অ্যাক্সেস প্রয়োজন, আমি কয়েক সেকেন্ড ঘুমানোর জন্য ভাল (এখন জন্য) কিছুই খুঁজে পেল না।

আমি সরাসরি ব্যবহার systemctl [--no-block] try-restartকরার আগে ব্যবহার করার চেষ্টা /script.shকরেছি কিন্তু কাজ হয়নি।


আমি এই দৃশ্যের জন্য একটি সমাধানও খুঁজছি। আপনি কি দয়া করে এই সমাধানটি আরও কিছুটা ব্যাখ্যা করতে পারেন? বা আপনি যা করেছেন তা পড়তে এবং বুঝতে কিছু ডক্সকে একটি লিঙ্ক দিন।
zappy

হাই @ জাজিপি, ম্যানুয়ালটি man systemd.unitঅনুসন্ধান করুন (বা এটি ইনস্টল না করা থাকলে অনলাইনে অনুসন্ধান করুন) এবং "ওভাররাইডিং বিক্রেতা সেটিংস" অধ্যায়টি সন্ধান করুন।
অ্যালেক্স

আপনার সহযোগিতার জন্য ধন্যবাদ। আমি বুঝতে পেরেছি যে আপনি কেবল উপরের পদ্ধতিটি বেছে নিয়েছেন কারণ পরিষেবা বি একটি বিক্রেতার নির্দিষ্ট এবং আপনি সেই পরিষেবা ফাইলটি সম্পাদনা করতে চান না। তবে আমার ক্ষেত্রে এ এবং বি উভয় পরিষেবা বিক্রেতার সরবরাহ নয়। আমি মনে করি এটি ওভাররাইড করা সিস্টেমে জটিলতা যুক্ত করতে পারে। আমাদের কি অন্য কোন বিকল্প আছে?
zappy

প্রশ্ন কয়েক বছর পুরনো, আপনি কি ডকুমেন্টেশন চেক করেছেন? সম্ভবত এই দৃশ্যটি coveredাকা পড়েছে। আমি তখন তাড়াহুড়ো করতে গিয়েছিলাম কিন্তু সময় থাকলে আমি সিস্টেমড অফিসিয়াল মেইলিং লিস্টটি সন্ধান করতাম এবং সেখানে জিজ্ঞাসা করতাম , অবশেষে একটি সমস্যা খুলি
অ্যালেক্স

1

এই মুহুর্তে সিস্টেমড এই সেনেরিওটি ​​কভার করে না। আপনি কেবল পরিষেবা ফাইলের মাধ্যমে এই কার্যকারিতা অর্জন করতে পারবেন না। একটি সম্ভাবনা হ'ল একই সিস্টেমে শেল স্ক্রিপ্টের মাধ্যমে সিস্টেমেস্টিটল হাইজ্যাক করা এবং সেই পরীক্ষায় দেখা গেল যে বি। সার্ভিস পুনরায় চালু / চালু হতে চলেছে কিনা, এ.আরসারিসের সাথে যথাযথ ব্যবস্থাও করা উচিত এবং প্রয়োজনে আপডেটটি আপডেট করতে হবে rc.local পাশাপাশি বুটে সঠিক অবস্থায় যেতে। ডকার.সার্ভিস এবং নেটওয়ার্কিং.সার্ভিস নিয়ে আমার এই সমস্যাটি রয়েছে তবে আমি তাদের সবসময় আবার একসাথে পুনরায় চালু করি:

systemctl পুনঃসূচনা ডকার। সার্ভিস নেটওয়ার্কিং

স্পষ্টতই, যদি সিস্টেমড নিজেই বি সার্ভিসগুলি অভ্যন্তরীণভাবে পরিচালনা করে (তবে অন্যান্য পরিষেবা ফাইলের মাধ্যমে।) তবে এটি কার্যকর হবে না।

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