সিস্টেমড এবং প্রক্রিয়া স্প্যানিং


14

এখানে সাধারণত পোস্ট করবেন না তবে আমি এই চুলটি ছাপিয়ে যাচ্ছি। আমার কাছে পাইথন স্ক্রিপ্ট রয়েছে যা এটি চালু হওয়ার পরে কাঁটাচামচ করে এবং অন্যান্য প্রক্রিয়াগুলির একটি গোছা শুরু করার জন্য দায়ী। এই স্ক্রিপ্টটি সিস্টেভিটের মাধ্যমে প্রারম্ভকালে চালু করা হত, তবে সম্প্রতি আমি ডেবিয়ান জেসিতে আপগ্রেড করেছি তাই এটি সিস্টেমডের মাধ্যমে লঞ্চ করার জন্য রূপান্তরিত হয়েছে।

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

সিস্টেমযুক্ত মাধ্যমে চালু করার সময়, পিতামাতার প্রক্রিয়াটি বন্ধ হয়ে গেলে, শিশুরা সকলেই খুব প্রস্থান করে (আচ্ছা, স্ক্রিনটি যে তারা মরা অবস্থায় প্রবর্তন করে এবং মৃত হিসাবে উপস্থিত হয় ???)

আদর্শভাবে আমার সমস্ত শিশু প্রক্রিয়াটি না মেরে পিতা-মাতা স্ক্রিপ্টটি পুনরায় চালু করতে সক্ষম হওয়া দরকার, এমন কিছু আছে যা আমি মিস করছি?

ধন্যবাদ!

[Unit]
Description=Server commander
After=network.target

[Service]
User=serveruser
Type=forking
PIDFile=/var/Server/Server.pid

ExecStart=/var/Server/Server.py
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

সম্পাদনা: পাইথন স্ক্রিপ্টটি মূলত এটির শিশু প্রক্রিয়াগুলির জন্য একটি 'নিয়ামক' বলে উল্লেখ করা আমার পক্ষে সম্ভবত প্রাসঙ্গিক। এটি কেন্দ্রীয় সার্ভারের অনুরোধ অনুসারে gnu স্ক্রিনে সার্ভার শুরু করে এবং বন্ধ করে দেয়। এটি সাধারণত সর্বদা চলমান থাকে, এটি পরিষেবাগুলিকে স্প্যান করে এবং প্রস্থান করে না। কিছু ক্ষেত্রে আছে যেখানে আমি শিশু প্রসেসগুলি হত্যা না করে স্ক্রিপ্টটি পুনরায় লোড করতে সক্ষম হতে চাই, এমনকি এর অর্থ যদি প্রক্রিয়াগুলি পিডে অনাথ হয় 1. বাস্তবে, পাইথন স্ক্রিপ্টটি প্রক্রিয়াগুলি বন্ধ করে দিয়েছিল কিনা তা বিবেচ্য হবে না would একটি পিতামাতার প্রক্রিয়া, যদি এটি এমনকি সম্ভব হয়।

এটি কীভাবে কাজ করে তার একটি আরও ভাল ব্যাখ্যা:

  • সিস্টেমযুক্ত স্প্যানস / সার্ভার.পি
  • সার্ভার.পি সিস্টডের জন্য পিড ফাইলটি কাঁটাচামচ করে এবং লেখায়
  • সার্ভার.পি তার নির্দেশাবলীর ভিত্তিতে gnu স্ক্রিনে সার্ভার প্রক্রিয়াগুলি তৈরি করে
  • সার্ভার থেকে অনুরোধ করা যে কোনও পুনরায় সূচনা করতে সার্ভার.পি চালিয়ে যাচ্ছে

সিস্টেমড ছাড়াই লঞ্চ করার সময়, সার্ভার.পিটি পুনরায় আরম্ভ করা যেতে পারে এবং এটি যে জিএনও স্ক্রিনগুলি চালু করে তা ক্ষতিগ্রস্থ হয়। সিস্টেমড দিয়ে চালু করার সময়, সার্ভার.পি যখন বন্ধ হয়ে যায়, সেই স্ক্রিন প্রসেসগুলি পিড 1 এতিম হওয়ার পরিবর্তে তারা মারা যায়।


1
Server.pyকোড এবং কীভাবে লঞ্চ পরিষেবাগুলি কাঁটাচামচ করে (যদি তারা কাঁটাচামচ করে) কী করে তার বিবরণ না দিয়ে সমাধান সরবরাহ করা শক্ত । তবে, সাধারণভাবে বলতে গেলে, এটি একটি প্রস্তুতি প্রোটোকল মিল নেই
ইন্টেলএফএক্স

বিটিডাব্লু, এর ExecStop=দরকার নেই। সিস্টেমডের স্টপ-এ ডিফল্ট ক্রিয়া হ'ল প্রক্রিয়াগুলি হ্রাস করা। KillMode=নির্দেশের জন্য আপনি ডকুমেন্টেশনটি একবার দেখে নিতে পারেন ।
ইন্টেলএফএক্স

1
এবং পরিশেষে ... যদি কোন উপযুক্ত প্রস্তুতি প্রটোকল (এক simpleবা forking, আসলে), শেষ অবলম্বন হবে Type=oneshot, RemainAfterExit=yesএবং KillMode=control-group
ইন্টেলএফএক্স

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

আমার কুণ্ডলীটি হ'ল সিস্টেমড এই জাতীয় নিয়ন্ত্রণ প্রক্রিয়াটিকে "পরিচালনা" করে না (এটি প্রারম্ভিক সময়ে পিআইডি-র সন্ধান করে, পরবর্তীগুলি সনাক্ত করে না ...): |
রজারডপ্যাক

উত্তর:


9

আমি কিলমোডকে কন্ট্রোল-গ্রুপের পরিবর্তে (ডিফল্ট) প্রসেসে সেট করে ঠিক এটি পরিচালনা করতে সক্ষম হয়েছি। সবাইকে ধন্যবাদ


এটি ঠিকঠাকের চেয়েও বেশি কিছু কাজের মতো মনে হচ্ছে, অন্য উত্তরগুলি দেখুন ... আপনি যদি এটি করেন এবং "সিস্টেমটেক্টল স্টপ" করেন তবে এটি শিশু প্রসেসগুলি মেরে ফেলবে না তারা এখনও চলবে [?] Systemctl এর তত্ত্বাবধানের বাইরে?
রজারডপ্যাক

5

আমার কাছে পাইথন স্ক্রিপ্ট রয়েছে যা এটি চালু হওয়ার পরে কাঁটাচামচ করে এবং অন্যান্য প্রক্রিয়াগুলির একটি গোছা শুরু করার জন্য দায়ী।

যা ইঙ্গিত দেয় যে আপনি এটি ভুলভাবে করছেন। এই মুহুর্তে আরও।

স্ক্রিপ্টটি প্রস্থান করলে শিশু প্রক্রিয়াগুলি অনাথ হয় এবং চালিয়ে যাওয়া চালিয়ে যায়।

এটি সঠিক ডমন আচরণ নয়। যদি "মূল" প্রক্রিয়া - এই ক্ষেত্রে আপনি যে শিশুটিকে কাঁটাচলা করেছেন, যেহেতু আপনি নির্দিষ্ট করেছেন Type=forking- প্রস্থান করা হয়েছে, সিস্টেমড পরিসেবাটি চালিয়ে যাওয়ার জন্য পরিষেবাটি নিষ্ক্রিয় হিসাবে বিবেচনা করে এবং অন্য চলমান প্রক্রিয়াগুলি (নিয়ন্ত্রণ গোষ্ঠীতে) বন্ধ করে দেয় consid ।

কখনও কখনও সিস্টেম 5 এর rcস্ক্রিপ্টগুলি থেকে সিস্টেমডে রূপান্তর করা সোজা হয় না, কারণ সিস্টেমডের অধীনে জিনিসগুলি করার সঠিক উপায়টি একেবারেই আলাদা। সিস্টেমে ওপেনভিপিএন, বা ওপেনস্ট্যাক, বা ওএসএসইসি এইচআইডিএস করার সঠিক উপায় ( rcস্ক্রিপ্টের সাহায্যে) এটির মতো নয় । আপনার কাছে এমন একটি স্ক্রিপ্ট রয়েছে যা কাঁটাচামচ করে চলেছে, তারপরে নাতি-নাতনিদের পুরো প্রক্রিয়া চালিয়ে যাচ্ছে, তারপরে এই নাতি-নাতনিদের চালিয়ে যাওয়ার প্রত্যাশা করা ইঙ্গিত দেয় যে আপনি ossec-controlদুই ধরণের কাঁটা কাঁধ মিলিয়েও একই ধরণের হরর আচরণ করছেন । আপনি যদি নিজেকে এমন একটি "মাস্টার" স্ক্রিপ্ট লিখতে দেখেন যা আপনার সিস্টেমের "সক্ষম" অংশগুলির জন্য "সক্ষম" পতাকাগুলি পরীক্ষা করে এবং চাইল্ড প্রক্রিয়াগুলি চালায়, তবে আপনি ভয়াবহর মতো একই ভুল করছেন ossec-control

সিস্টেমেডের সাথে এ জাতীয় কোনও গৃহজাত পদ্ধতি দরকার নেই। এটি ইতিমধ্যে একটি পরিষেবা পরিচালক। প্রতি /unix//a/200365/5132 , systemd হল এই সম্পর্কে দিক থেকে ঠিক পন্থা একটি পরিষেবা আছে নয় যে spawns কিছু পাগলাটে এবং "উপ-পরিষেবাসমূহ" আছে বিভ্রান্ত প্রচেষ্টা। এটি প্রতিটি সন্তানের প্রক্রিয়াটিকে তার নিজের মতো করে সম্পূর্ণরূপে সিস্টেমড সার্ভিস হিসাবে গ্রহণ করা উচিত। তারপরে কেউ সাধারণ সিস্টেমড কন্ট্রোলগুলি ব্যবহার করে সিস্টেমের বিভিন্ন অংশ সক্ষম ও অক্ষম করে এবং শুরু করে থামায়। আপনি যেমন ওএসএসইসি এইচআইডিএস ক্ষেত্রে দেখতে পাচ্ছেন, একটি সাধারণ টেম্পলেট পরিষেবা ইউনিট প্রায় সকলকে কভার করে (একটি ব্যতিক্রম /ubuntu//a/624871/43344 ) পরিষেবাগুলিকে অন্তর্ভুক্ত করে, systemctl enable ossec@agentlessd.serviceকোনও ব্যক্তি যাতে things চ্ছিক সক্ষম করতে এমন কিছু করার অনুমতি দেয়agentlessdসিস্টেম 5 এর সাথে যে ভয়াবহ "মাস্টার স্ক্রিপ্ট" মেকানিজম প্রয়োজন ছিল তার কোনও প্রয়োজন ছাড়াই পরিষেবা rc

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


আমি এই সম্পর্কে প্রতিক্রিয়া প্রশংসা করি। যদিও আমি সম্মত হয়েছি যে সাবসেট পরিষেবাদিগুলি বোধগম্য হয়, পাইথনে এটি একটি কারণে করা হয়েছিল যা আমি প্রবেশ করতে পারি না। আমার একমাত্র সমাধান হ'ল এই পদ্ধতিটিকে কাজ করার উপায় খুঁজে পাওয়া। ধন্যবাদ যদিও. আমি এটি সঠিকভাবে করতে চাই।
বোতসোয়ানা

স্ক্রিপ্টটি চালু করে এমন 'সাব-সার্ভিসেসগুলি সুনির্দিষ্ট ব্যবহারকারী হিসাবে gnu স্ক্রিনে চলমান সার্ভারগুলি are এই সার্ভারগুলি অনেক পরিবর্তন করে, কিছু যুক্ত হয়, কিছু সরানো হয় এবং এটি অন্য কোথাও নিয়ন্ত্রণ করা হয়, তাই তারা প্রকৃতপক্ষে সিস্টেমেড প্রকৃত পরিষেবা হতে পারে না, কারণ এটি অনেক জটিলতা যুক্ত করে এবং কেন্দ্রীয়ভাবে পরিচালনা করতে পারে না। একই স্ক্রিপ্টটি নন সিস্টেমড সার্ভারগুলিতেও ব্যবহৃত হয়।
বোতসোয়ানা

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

0

আপনি কেবল পিতামাতাকে ঘুমাতে পারেন, এবং স্টপ সময়ে সিস্টেমেড এটি মেরে ফেলার জন্য অপেক্ষা করতে পারেন।

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