রানিট কাস্টম স্টপ স্ক্রিপ্ট কীভাবে লিখবেন


12

প্রক্রিয়াটি থামাতে / পুনরায় চালু করার সময় আমি একটি কাস্টম "স্টপ" স্ক্রিপ্ট runit( runsv) চালাতে চাই। বর্তমানে এটি কেবল প্রক্রিয়াটিকে হত্যা করে, তারপরে "সমাপ্তি" স্ক্রিপ্টটি চালায়। তবে আমার ক্ষেত্রে, আমার প্রক্রিয়াটি গতিময়ভাবে শিশু প্রক্রিয়াগুলিকে উত্সাহিত করে, তাই সাধারণের পরিবর্তে , এগুলি থেকে মুক্তি পাওয়ার জন্য killআমার একটি প্রয়োজন a "killtree"আমি কেমন করে ঐটি করি?

আমি জানি এটি controlরানিটের বিকল্পগুলির মাধ্যমে করা উচিত তবে ডকগুলি পড়া থেকে আমার কাছে স্পষ্ট হয় না যে স্টপ স্ক্রিপ্টটির নামকরণ কীভাবে করা উচিত :(

http://smarden.org/runit/runsv.8.html


আপনার পরিষেবা (স্ক্রিপ্ট নয় তবে প্রোগ্রামটি) খারাপ আচরণ বলে মনে হচ্ছে, এটি তার নিজের বাচ্চাদের পরে কাটা / পরিষ্কার করা উচিত। শুধু কৌতূহল, এটা কি?
অ্যাভারি

উত্তর:


13

ডক্স থেকে

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

এর অর্থ আপনার একটি service_name/control/Xএক্স এক্স এক্সিকিউটেবল তৈরি করা দরকার যা আপনি যখন svসার্ভিসে সম্পর্কিত কমান্ডটি পাঠাবেন তখন চালিত হবে , যেমন dকমান্ডটি (ডাউন)। যদি আপনার স্ক্রিপ্টটি 0 স্ট্যাটাসের সাথে প্রস্থান করে তবে এটি পরিষেবাটি নিজেই ডাউন করার চেষ্টা করবে না।

মূলত আপনার উপর একটি এক্সিকিউটেবল স্ক্রিপ্ট /etc/sv/<service>/control/dদরকার যা আপনি যা চান তা করবে এবং পরিষেবাটি মেরে ফেলবে, পিডস পরিষ্কার করবে এবং ইত্যাদি will


রান স্যার যেভাবে কাজ করেন এটি সত্যিই আকর্ষণীয় এবং সহজ।
জাজং নগুইন

2

সহজ উত্তরটি হল আপনার ক্লিনআপ স্ক্রিপ্টটির নাম "পরিষেবা / সমাপ্তি"। "সার্ভিস / রান" প্রস্থান করার সময় এই স্ক্রিপ্টটি কার্যকর করা হয়।

এছাড়াও একটি "পরিষেবা / নিয়ন্ত্রণ / ctrl_char ইন্টারফেস আছে। এটি আপনাকে রানসকে কোন আদেশ পাঠায় তার উপর নির্ভর করে পৃথক পৃথক ক্রিয়া সম্পাদন করতে দেয়।


1
TERM CONT চলমান পরিষেবাতে প্রেরণের পরে পরিষেবা / সমাপ্তি চলে। এটি হত্যার পরে ক্লিয়ারিং সার্ভিসের মতো।
ম্যাক্সিমকোস্ট্রিকিন

2

ডকারের জন্য আমাকে এই সমস্যাটি নিজেই সমাধান করতে হয়েছিল। আমার উউজি সার্ভার চালু ছিল এবং কনটেইনারটি থামানোর ক্ষেত্রে এটি ডকেকারের মাধ্যমে ভুল সংকেত প্রেরণ করা হয়েছিল (INT এর পরিবর্তে TERM)।

নিয়ন্ত্রণ / এক্স ফাইলগুলির ধারণাটি কোনও প্রাপ্ত সংকেতকে প্রতিক্রিয়া জানায়। আমার ক্ষেত্রে আমি tটার্মিনেট সিগন্যালের জন্য একটি ফাইল নিয়ন্ত্রণে রাখব , যেহেতু এটি ফাইলটি সংকেত শব্দটির জন্য সংরক্ষিত। স্ক্রিপ্টটি কার্যকর করা উচিত।

#!/bin/bash
kill -INT `cat /tmp/project-master.pid`

স্ক্রিপ্টটি উউসগি প্রক্রিয়াটির জন্য একটি সংকেত প্রেরণ করে, যা আমি চাই।

যদি কন্ট্রোল স্ক্রিপ্টটি ত্রুটি ছাড়াই প্রস্থান করা হয় (রিটার্ন কোড 0) মূল সিগন্যালটি প্রক্রিয়াতে প্রেরণ করা হবে না।

সুতরাং আমার ক্ষেত্রে আমি শব্দ সংকেত গ্রহণ করতে সক্ষম হয়েছি এবং এর পরিবর্তে পরিষেবা প্রসেসে কোনও আন্ত সংকেত পাঠিয়েছি।

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