পুনরায় লোডে ডেমোনকে মেরে ফেলা এবং পুনরায় চালু করার জন্য সিস্টেমেড কনফিগার করবেন কীভাবে?


12

আমার একটি পুরাতন স্কুল ডেমন রয়েছে যা আমি সিস্টেমড ব্যবহার করে নিয়ন্ত্রণ করতে চাই। যখন এর কনফিগারেশন ফাইলটি পরিবর্তন হয়, এটিকে হত্যা করে পুনরায় আরম্ভ করা দরকার। অন্য কথায়, কনফিগার ফাইলটি সম্পাদনা করার পরে, systemctl reload MYSERVICEপ্রক্রিয়াটি মেরে ফেলা উচিত rest

চেষ্টা 1: ডিফল্ট চেষ্টা করুন। এটি সিস্টেমডকে জানায় যে কীভাবে ডেমন শুরু করা যায়, তবে কীভাবে এটি পুনরায় লোড করা যায় না।

[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple

ফলস্বরূপ, startএবং restartকাজ, কিন্তু reloadএই ত্রুটি দেয়:

# systemctl reload MYSERVICE
Failed to reload MYSERVICE.service: Job type reload is not applicable for unit MYSERVICE.service.

চেষ্টা 2: প্রক্রিয়াটি কীভাবে হত্যা করা যায় তা বলুন। এটি প্রক্রিয়াটিকে মেরে ফেলেছে তবে সিস্টেমড আমার জন্য এটি পুনরায় আরম্ভ করবেন না।

[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
ExecReload=/bin/kill -HUP $MAINPID

... অনুসরণ করেছে ...

# systemctl daemon-reload
# systemctl reload MYSERVICE

... প্রক্রিয়াটিকে মেরে ফেলে তবে এটি স্বয়ংক্রিয়ভাবে পুনরায় চালু হয় না।

চেষ্টা 3: প্রক্রিয়াটি পুনরায় আরম্ভ করতে এক্সিকিউরেলোড ব্যবহার করুন। এটি কয়েকটি কারণে ব্যর্থ:

ExecReload=/bin/kill -HUP $MAINPID ; /usr/bin/MYSERVICE

... আমি পেয়েছি ত্রুটি বার্তা ...:

# systemctl daemon-reload
# systemctl reload MYSERVICE
Job for MYSERVICE.service failed because the control process exited with error code. See "systemctl status MYSERVICE.service" and "journalctl -xe" for details.

আমি প্রত্যাশা করব যে সেখানে একটি পুনরায়লোড টাইপ = কিল_আর_স্টার্ট বা অন্য কিছু হবে তবে এরকম ভাগ্য হবে না।

পুনরায় লোডের সময় ডেমোনকে মেরে ফেলা এবং পুনরায় চালু করতে সিস্টেমডকে কীভাবে বলা যায়?


এটি কি পুনরায় লোডের সাথে জুতা দেওয়া দরকার , যেখানে এটি পুরোপুরি ফিট হয় না? আপনি কি ডিমনকে সংবেদনশীল আচরণ করতে পারবেন না?
মাইকেল হ্যাম্পটন

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

1
আমি নিশ্চিত যে কোনও উত্তর কারওর পক্ষে সহায়তা করতে পারে, তাই আমি প্রশ্নটি আপভোট করেছি। আমি নিশ্চিত নই যে এটি সাধারণ ব্যবহারের ঘটনা। পাঁচ বছর বা তার বেশি সময় ধরে সিস্টেমেড ব্যবহার করার পরে, বিশ্বের যে দিন এটি প্রকাশিত হয়েছিল, প্রায় প্রথম দিন থেকেই আমি এই প্রথম যে কেউ এই ধরণের দৃশ্যের চেষ্টা করছে সে সম্পর্কে শুনার কথা স্মরণ করতে পারি। বিশদটি অনুপস্থিত থাকার কারণে আমি কিছু ভুল বুঝছি possible
মাইকেল হ্যাম্পটন

উত্তর:


16

উত্তর, "আপনি না"! তবে আমাদের কাছে সুসংবাদ রয়েছে।

সিস্টেমডের দর্শন হ'ল পুনরায় লোড optionচ্ছিক এবং যদি সত্যিকারের পুনরায় লোড কার্যকারিতা না থাকে তবে অপরিজ্ঞাত রেখে দেওয়া উচিত। আমি "সত্য পুনরায় লোড কার্যকারিতা" এমন একটি লোড হিসাবে সংজ্ঞায়িত করব যা পরিষেবাটি মেরে এবং পুনঃসূচনা না করে, বা পরিষেবাটিকে তার পিআইডি পরিবর্তন করে দেয়। অন্য কথায়, সিস্টেমড কেবল কি বৈশিষ্ট্য বিদ্যমান তা প্রতিফলিত করতে চায়।

পরিবর্তে, আপনার ব্যবহার করা উচিত systemctl reload-or-restartযা বিদ্যমান থাকলে পুনরায় লোড করবে এবং এটি না থাকলে পুনরায় চালু করতে হবে।

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

   reload-or-restart PATTERN...
       Reload one or more units if they support it. If not, restart them
       instead. If the units are not running yet, they will be started.

   reload-or-try-restart PATTERN...
       Reload one or more units if they support it. If not, restart them
       instead. This does nothing if the units are not running. Note that,
       for compatibility with SysV init scripts, force-reload is
       equivalent to this command.

অতএব: (1) এক্সিকিউরেলোডটি ফাঁকা ছেড়ে দিন, (২) ব্যবহার করুন systemctl reload-or-restart MYSERVICEএবং (3) আপনার সমস্ত প্রস্তুত হওয়া উচিত।

আপনি যদি পরিষেবাটি মেরে ফেলা এবং পুনরায় চালু করার কোনও উপায় সংজ্ঞায়িত করার জন্য এক্সেকারেলোড ব্যবহার করার চেষ্টা করেন তবে এতে একটি নতুন পিআইডি থাকবে এবং সিস্টেমড বিভ্রান্ত হবে।


3

সিস্টেমডের দর্শনটি হ'ল alচ্ছিক reloadএবং সিস্টেমডের ব্যবহারকারীদের প্রতিটি পরিষেবার জন্য জানা উচিত, এটি কল করে কল করা উচিত reloadবা জাল করা উচিত restart

সুতরাং, আপনার প্রশ্নের উত্তর হ'ল "এটি কাজ করে না এবং এটি করা উচিত নয় n't দয়া করে পরবর্তী উচ্চ স্তরে এটি সমাধান করুন।"

অন্য কথায়, সিস্টেমড আপনাকে কেবল " পুনরায় লোড " প্রয়োগ করতে চায় যদি অন্তর্নিহিত পরিষেবাটি সত্যিকারের পুনরায় লোড কার্যকারিতা সমর্থন করে ... যেমন একটি পুনরায় লোড যা পরিষেবাটি হত্যা না করে এবং পুনরায় চালু না করে, বা পরিষেবাটিকে তার পিআইডি পরিবর্তন করে দেয়। অন্য কথায়, সিস্টেমড কেবল কি বৈশিষ্ট্য বিদ্যমান তা প্রতিফলিত করতে চায়।

আপনি নিজেকে জিজ্ঞাসা করতে পারেন: তবে যদি আমি ExecReloadপরিষেবাটি মেরে ও পুনরায় চালু করার অনুমতি দিয়ে একটি "জাল" পুনরায় লোডটি প্রয়োগ করতে পারি তবে কী সহজ ছিল না ? তারপরে আমি systemctl reload FOOআমার সমস্ত পরিষেবাগুলির জন্য ব্যবহার করতে পারি এবং কোনটি এটি সমর্থন করে এবং কোনটি সমর্থন করে না তা আমাকে মনে রাখতে হবে না?

হ্যাঁ, এটি সহজ হবে তবে এটি সিস্টেমডের মতো হবে না। সিস্টেমডি কলারটি এমন জিনিস হিসাবে চায় reloadযা সেবার জন্য বিদ্যমান কিনা তা জানে । সিস্টেমড বিদ্যমান বৈশিষ্ট্যগুলির একটি সাধারণ ইন্টারফেস হতে চায়, শূন্যস্থান পূরণ করার জন্য এটি দায়ী হতে চায় না।

উদাহরণস্বরূপ, পুতুল অনুমান একটি systemd হল চালিত পরিসেবা দ্বারা কোনো আছে reloadএবং হত্যা এবং প্রক্রিয়া পুনরায় চালু করার ডিফল্ট । পরিষেবা [] টাইপটি যদি পুনরায় লোড বিদ্যমান তা নির্দিষ্ট করার জন্য কোনও উপায় যুক্ত করে এবং এটি বিজ্ঞপ্তিতে ব্যবহার করা উচিত তবে কোন পরিষেবাগুলিতে নেটিভ রিলোডলোড নেই বা নেই তা শিখতে হবে। শেফ এবং অন্যান্য সমস্ত সিস্টেমকেও একই জিনিস শিখতে হবে কারণ সিস্টেমড চায় যে এটি স্তরটিতে এটি সমাধান করা। (মিনির্যান্ট: সিস্টেম প্রক্রিয়া শুরু করার জন্য মনে হয় সর্বজ্ঞ, সমস্ত মাউন্টিং, অল-নেমস্পেস-কাস্টমাইজিং আই-ডু-সব-মাই-লেয়ার সিস্টেম। সুতরাং আমি আপনাকে বলতে পারি না কেন এটি হয় না এই দর্শনটি পুনরায় লোড করার ক্ষেত্রে প্রসারিত করুন Maybe সম্ভবত কোনও লেখক এখানে চিমাইতে পারেন))


1
রয়েছে systemctl reload-or-restart, যা পরিষেবাটিকে সমর্থন করলে এটি পুনরায় লোড করবে এবং এটি যদি এটি না করে তবে এটি পুনরায় চালু করবে। কেন পুতুল এই ধারণা গ্রহণ করে তা জানা নেই।
মাইকেল হ্যাম্পটন 19
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.