Systemd প্রাথমিক নির্দেশিকা: বাস্তব কাজের অংশ

< Systemd 入门教程:命令篇

Systemd প্রাথমিক নির্দেশিকা: বাস্তব কাজের অংশ

লেখক: রুয়ান ইয়িফেং

তারিখ: ২০১৬ সালের ৮ মার্চ

গত লেখায়, আমি Systemd এর সম্পর্কে পরিচয় দিয়েছিলাম। মুখ্য আদেশ আজ আমি আপনাকে দেখাব কিভাবে এটি ব্যবহার করে কিছু মৌলিক কাজ সম্পন্ন করতে হয়। bg2016030801

এক. কম্পিউটার চালু করা

যে সমস্ত সফটওয়্যার Systemd সমর্থন করে, ইনস্টল করার সময়, স্বয়ংক্রিয়ভাবে /usr/lib/systemd/system ডিরেক্টরিতে একটি কনফিগারেশন ফাইল যুক্ত করুন। যদি আপনি চান যে এই সফ্টওয়্যারটি বুটের সময় চালু হয়, তাহলে নিচের কমান্ডটি চালান (যেমন httpd.service উদাহরণস্বরূপ)।

উপরের আদেশটি সমান হল /etc/systemd/system একটি ডিরেক্টরিতে একটি প্রতীকী লিঙ্ক যুক্ত করুন, যা নির্দেশ করে /usr/lib/systemd/system ভিতরে httpd.service ফাইল। এটি কারণ যখন সিস্টেম চালু হয়, Systemd শুধুমাত্র কার্যকর করুন /etc/systemd/system ডিরেক্টরির মধ্যে কনফিগারেশন ফাইল। এর মানে হলো, যদি সংশোধিত কনফিগারেশন ফাইলটি এই ডিরেক্টরিতে রাখা হয়, তাহলে মূল কনফিগারেশনটি ওভাররাইট করার ফলাফল পাওয়া যাবে।

দুই, সেবা শুরু করুন

স্টার্টআপ সেটিংস করার পর, সফটওয়্যারটি অবিলম্বে চালু হবে না, আপনাকে পরবর্তী বার কম্পিউটার চালু হওয়ার জন্য অপেক্ষা করতে হবে। যদি আপনি এখনই সফটওয়্যারটি চালাতে চান, তবে আপনাকে এটি চালাতে হবে। systemctl start আদেশ। বুট আপ শুরু করার পর, সফটওয়্যারটি তাত্ক্ষণিকভাবে চালু হবে না, পরবর্তী বুট পর্যন্ত অপেক্ষা করতে হবে। যদি আপনি এখনই সফটওয়্যারটি চালাতে চান, তবে আপনাকে এটি কার্যকর করতে হবে। systemctl start আদেশ।

উপরের কমান্ডটি কার্যকর করার পর, এটি শুরু হতে ব্যর্থ হতে পারে, তাই ব্যবহার করতে হবে systemctl status এই পরিষেবাটির স্থিতি দেখার জন্য আদেশ দিন।

উপরের আউটপুটের ফলাফল অর্থ হলো।

লোড করা সারি: কনফিগারেশন ফাইলের অবস্থান, কি এটি স্টার্টআপে চালু করা হবে সক্রিয় লাইন: চলমান অবস্থায় নির্দেশ করে মূল প্রক্রিয়ার আইডি স্ট্যাটাস লাইন: অ্যাপ্লিকেশন নিজেই (এখানে httpd) দ্বারা প্রদত্ত সফটওয়্যারের বর্তমান অবস্থা সিগ্রুপ ব্লক: অ্যাপ্লিকেশনের সমস্ত সাবপ্রক্রিয়া লগ ব্লক: অ্যাপ্লিকেশনের লগ

তিন। সেবা বন্ধ করা

চলমান পরিষেবা বন্ধ করার জন্য, কার্যকর করতে হবে। systemctl stop আদেশ।

有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出 kill সঙ্কেত।

এছাড়াও, পরিষেবা পুনরায় চালু করতে হবে। systemctl restart আদেশ।

চার, কনফিগারেশন ফাইল বুঝতে হবে

একটি পরিষেবা কীভাবে শুরু হবে, সম্পূর্ণরূপে এর কনফিগারেশন ফাইল দ্বারা নির্ধারিত হয়। নিচে দেখা যাক, কনফিগারেশন ফাইলে কী কী বিষয় রয়েছে।

আগে বলা হয়েছিল, কনফিগারেশন ফাইল প্রধানত রাখা হয় /usr/lib/systemd/system সূচী, এছাড়াও হতে পারে /etc/systemd/system সূচী। কনফিগারেশন ফাইলটি খুঁজে পাওয়ার পর, এটি একটি টেক্সট এডিটর দিয়ে খুলুন। systemctl cat নির্দেশনা কনফিগারেশন ফাইল দেখার জন্য ব্যবহার করা যেতে পারে, নিচে হিসাবে sshd.service ফাইলটির উদাহরণ হলো, এর কাজ হলো একটি SSH সার্ভার চালু করা, যাতে অন্যান্য ব্যবহারকারীরা SSH মাধ্যমে লগইন করতে পারে।

দেখা যাচ্ছে, কনফিগারেশন ফাইলটি কয়েকটি ব্লকে বিভক্ত, প্রতিটি ব্লকে কয়েকটি কী-মান জোড় রয়েছে।

নিচে প্রতিটি ব্লকের বিষয়বস্তু ব্যাখ্যা করা হয়েছে।

পাঁচ, [ইউনিট] ব্লক: শুরু করার ক্রম এবং নির্ভরতাগুলি।

Unit ব্লকের Description ফিল্ডটি বর্তমান সেবার একটি সহজ বর্ণনা প্রদান করে, Documentation ফিল্ডটি ডকুমেন্টের অবস্থান দেখায়। পরবর্তী সেটআপটি শুরু করার ক্রম এবং নির্ভরশীলতা, এটি খুব গুরুত্বপূর্ণ।

After ক্ষেত্র: নির্দেশ করে যদি network.target অথবা sshd-keygen.service প্রয়োজনীয় শুরু করতে, তাহলে sshd.service এগুলো পরে চালু করা উচিত।

তদনুসারে, আরও একটি আছে। Before ক্ষেত্র, সংজ্ঞা sshd.service কোন সেবার আগে শুরু করা উচিত। লক্ষ্য করুন, After এবং Before ক্ষেত্রটি কেবল শুরু করার ক্রমের সাথে সম্পর্কিত, নির্ভরতার সাথে নয়।

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

Wants ক্ষেত্র: প্রকাশ করে sshd.service সাথে sshd-keygen.service 之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响 sshd.service অব্যাহত রাখুন।

Requires 字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么 sshd.service এবং অবশ্যই বেরিয়ে আসতে হবে।

মনোযোগ দিন, Wants ফিল্ড এবং Requires ফিল্ডটি শুধুমাত্র নির্ভরতা সম্পর্কিত, শুরু করার ক্রমের সাথে কোনো সম্পর্ক নেই, ডিফল্টভাবে এটি একই সময়ে শুরু হয়।

ছয়, [সার্ভিস] অঞ্চল: শুরু আচরণ

Service ব্লক ডিফিনিশন কিভাবে বর্তমান সার্ভিস শুরু করে।

৬.১ চালু করার আদেশ

অনেক সফটওয়্যারের নিজস্ব পরিবেশ প্যারামিটার ফাইল রয়েছে, যা ব্যবহার করা যেতে পারে। EnvironmentFile ক্ষেত্র পড়া।

EnvironmentFile ফিল্ড: বর্তমান পরিষেবার পরিবেশ প্যারামিটার ফাইল নির্ধারণ করুন। এই ফাইলের ভিতরে key=value কী-মান জোড়, ব্যবহার করা যায় $key বর্তমান কনফিগারেশন ফাইলে আকারে প্রাপ্ত করা।

উপরের উদাহরণে, sshd এর পরিবেশ প্যারামিটার ফাইল হল /etc/sysconfig/sshd কনফিগারেশন ফাইলের সবচেয়ে গুরুত্বপূর্ণ ক্ষেত্র হল ExecStart

ExecStart ফিল্ড: প্রক্রিয়া শুরু করার সময় কার্যকর করা কমান্ড সংজ্ঞায়িত করে।

উপরের উদাহরণে, চালু করা sshd কার্যকর করার আদেশ হল /usr/sbin/sshd -D $OPTIONS যেখানে ভেরিয়েবলগুলি $OPTIONS এটি থেকে এসেছে EnvironmentFile ফিল্ড দ্বারা নির্দিষ্ট পরিবেশ প্যারামিটার ফাইল। এর সাথে সমান কার্যকরী অন্যান্য ফিল্ডগুলি হলো।

ExecReload ফিল্ড: পুনরায় চালু করার সময় কার্যকর করা কমান্ড

ExecStop ফিল্ড: পরিষেবা বন্ধ করার সময় কার্যকর করা কমান্ড

ExecStartPre ফিল্ড: পরিষেবা শুরু করার আগে কার্যকর করার কমান্ড

ExecStartPost ফিল্ড: পরিষেবা চালু করার পরে কার্যকর করা কমান্ড

ExecStopPost ফিল্ড: সেবা বন্ধ করার পর কার্যকর করা হয় এমন কমান্ড

দয়া করে নীচের উদাহরণটি দেখুন।

এই কনফিগারেশন ফাইলের দ্বিতীয় লাইন ExecStart শূন্য মান সেট করা হয়েছে, প্রথম লাইনের সেটিং বাতিল করা হয়েছে, ফলাফল নীচে দেওয়া হল।

সকল স্টার্টআপ সেটিংসের আগে একটি সংযোগকারী চিহ্ন যোগ করা যেতে পারে ( - ),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如, EnvironmentFile=-/etc/sysconfig/sshd (দ্রষ্টব্য সমান চিহ্নের পরে যে সংযোগী চিহ্নটি আছে), এটি নির্দেশ করে যে যদিও /etc/sysconfig/sshd ফাইলটি নেই, এবং কোন ত্রুটি ছাড়াও।

৬.২ চালু করার ধরন

Type ফিল্ড ডিফিনিশন স্টার্টআপ টাইপ। এটি সেট করা যেতে পারে এমন মানগুলি নিম্নরূপ।

সাধারণ (ডিফল্ট মান): ExecStart ফিল্ড শুরু করা প্রক্রিয়া প্রধান প্রক্রিয়া।

forking: ExecStart ফিল্ডটি হবে fork() পদ্ধতি শুরু হলে, এই সময় পিতৃ প্রক্রিয়া বের হয়ে যাবে, এবং শিশু প্রক্রিয়া প্রধান প্রক্রিয়া হয়ে উঠবে।

ওনশট: অনুরূপ simple কিন্তু এটি শুধুমাত্র একবার কার্যকর হবে, Systemd এটি সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করবে, তারপর অন্যান্য পরিষেবাগুলি চালু করবে।

ডিবাস: এর মতো simple কিন্তু D-Bus সংকেতের জন্য অপেক্ষা করে শুরু হবে।

নোটিফাই: অনুরূপ simple শুরু করার পরে একটি বিজ্ঞপ্তি সিগন্যাল পাঠানো হবে, তারপর Systemd অন্যান্য পরিষেবাগুলি আবার শুরু করবে।

অবসন্ন: অনুরূপ simple কিন্তু অন্য কাজগুলো সম্পন্ন হওয়া পর্যন্ত ওই পরিষেবাটি শুরু হবে না। একটি ব্যবহারিক পরিস্থিতি হলো ওই পরিষেবার আউটপুট অন্য পরিষেবার আউটপুটের সাথে মিশ্রিত না হওয়ার জন্য।

উপরের কনফিগারেশন ফাইলের শুরু করার ধরন নির্ধারণ করুন oneshot এটি নির্দেশ করে যে এই পরিষেবাটি একবার চালানোই যথেষ্ট, দীর্ঘমেয়াদীভাবে চালানোর প্রয়োজন নেই। যদি এটি বন্ধ করা হয় এবং পরে কখনো চালু করতে চান, কনফিগারেশন ফাইলটি নিচের মতো পরিবর্তন করুন।

উপরের কনফিগারেশন ফাইলে, RemainAfterExit ফিল্ড সেট করুন yes প্রক্রিয়া শেষ হওয়ার পরে, পরিষেবাটি এখনও কার্যকর থাকবে। এইভাবে, একবার ব্যবহার করার পরে systemctl stop সেবা বন্ধ করার আদেশ। ExecStop নির্দেশিত কমান্ডটি কার্যকর হবে, ফলে টাচপ্যাড পুনরায় চালু হবে।

৬.৩ পুনরায় চালু করার আচরণ

Service ব্লকটির কিছু ক্ষেত্র রয়েছে, যা পুনরায় শুরু করার আচরণ সংজ্ঞায়িত করে।

KillMode ফিল্ড: সিস্টেমড কিভাবে sshd সার্ভিস বন্ধ করে তা সংজ্ঞায়িত করে।

উপরের এই উদাহরণে,将 KillMode নির্ধারণ করুন process এটি মূল প্রক্রিয়া বন্ধ করার জন্য ইঙ্গিত করে, কিন্তু কোনো sshd উপপ্রক্রিয়া বন্ধ করে না, অর্থাৎ উপপ্রক্রিয়ায় খোলা SSH সেশন এখনও সংযোগ বজায় রাখে। এই সেটিংটি খুব সাধারণ নয়, তবে sshd এর জন্য গুরুত্বপূর্ণ, অন্যথায় আপনি যখন পরিষেবা বন্ধ করেন, তখন আপনি নিজের খোলা SSH সেশনকেও হত্যা করবেন।

KillMode ফিল্ডে সেট করা যেতে পারে এমন মান নিচে দেওয়া হল।

নিয়ন্ত্রণ-গ্রুপ (ডিফল্ট মান): বর্তমান নিয়ন্ত্রণ গ্রুপের মধ্যে সমস্ত উপ-প্রক্রিয়া হত্যা করা হবে।

প্রক্রিয়া: শুধুমাত্র প্রধান প্রক্রিয়া হত্যা করুন

মিশ্রিত: প্রধান প্রক্রিয়া SIGTERM সংকেত গ্রহণ করবে, এবং উপ-প্রক্রিয়া SIGKILL সংকেত গ্রহণ করবে।

কোনও প্রক্রিয়া হত্যা করা হবে না, কেবলমাত্র পরিষেবার স্টপ কমান্ড চালানো হবে।

পরবর্তী হল Restart ক্ষেত্র।

Restart ফিল্ড: sshd বের হওয়ার পর Systemd এর পুনরায় শুরু করার পদ্ধতি সংজ্ঞায়িত করে।

উপরের উদাহরণে, Restart নির্ধারণ করুন on-failure যেকোনো অপ্রত্যাশিত ব্যর্থতার জন্য, sshd পুনরায় শুরু করা হবে। যদি sshd সঠিকভাবে বন্ধ হয় (যেমন কার্যকর করা) systemctl stop এটি পুনরায় চালু হবে না।

Restart ফিল্ডে সেট করা যেতে পারে এমন মান নিচে দেওয়া হল।

না (ডিফল্ট মান): প্রস্থান করার পরে পুনরায় শুরু হবে না।

on-success: শুধুমাত্র স্বাভাবিকভাবে প্রস্থান করার সময় (প্রস্থান স্থিতি কোড 0 হলে) এটি পুনরায় শুরু হবে।

on-failure: অস্বাভাবিক প্রস্থান হলে (প্রস্থান স্ট্যাটাস কোড 0 এর বাইরে), সিগন্যাল দ্বারা বন্ধ করা এবং টাইমআউট সহ, তখনই পুনরায় চালু হবে।

অনঅস্বাভাবিক: শুধুমাত্র সংকেত বন্ধ এবং টাইমআউট হলে পুনরায় চালু হবে।

on-abort: শুধুমাত্র যখন কোনো অদৃশ্য সিগন্যালের কারণে সমাপ্তি ঘটে, তখনই পুনরায় শুরু হবে।

অন-ওয়াচডগ: সময়সীমা শেষ হলে, তবেই পুনরায় চালু হবে।

যেকোনো প্রস্থান কারণই হোক, সবসময় পুনরায় শুরু করুন।

ডেমনের জন্য, সেট করা সুপারিশ করা হয় on-failure যেসব সেবায় ভুল প্রস্থান ঘটতে দেয়, সেগুলো সেট করা যেতে পারে। on-abnormal

শেষ হলো RestartSec ক্ষেত্র।

RestartSec ফিল্ড: সিস্টেমড পরিষেবা পুনরায় চালু করার আগে অপেক্ষা করতে হবে এমন সেকেন্ডের সংখ্যা। উপরের উদাহরণে 42 সেকেন্ড অপেক্ষা করতে সেট করা হয়েছে।

সাত, [ইনস্টল] ব্লক

Install ব্লক, এই কনফিগারেশন ফাইলটি কিভাবে ইনস্টল করতে হবে তা সংজ্ঞায়িত করুন, অর্থাৎ কিভাবে এটি বুট আপ করার সময় শুরু করা যায়।

WantedBy ক্ষেত্র: এই পরিষেবাটি যেখানে অবস্থিত তা নির্দেশ করে।

Target এর অর্থ হল পরিষেবা গ্রুপ, যা একটি পরিষেবার একটি গ্রুপ নির্দেশ করে। WantedBy=multi-user.target এটি বোঝায়, sshd যেখানে অবস্থিত লক্ষ্য হল multi-user.target এই সেটিংটি অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি সম্পাদন করে। systemctl enable sshd.service নির্দেশ দেওয়ার সময়, sshd.service একটি প্রতীকী লিঙ্ক, এটি স্থাপন করা হবে /etc/systemd/system সুচীপত্রের নিচে multi-user.target.wants সাবডিরেক্টরির মধ্যে। Systemd-তে ডিফল্ট স্টার্ট টার্গেট রয়েছে।

উপরের ফলাফলটি নির্দেশ করে যে, ডিফল্ট শুরু করার লক্ষ্য হল multi-user.target এই গ্রুপের সকল সার্ভিস স্বয়ংক্রিয়ভাবে চালু হবে। এটাই কারণ। systemctl enable বিধি দ্বারা বুট শুরু করার কারণ সেট করা যায়। টার্গেট ব্যবহার করার সময়, systemctl list-dependencies আদেশ এবং systemctl isolate আদেশও খুবই উপকারী।

সাধারণভাবে, সাধারণত ব্যবহৃত টার্গেট দুটি আছে: একটি হল multi-user.target , একাধিক ব্যবহারকারী কমান্ড লাইন অবস্থার প্রতিনিধিত্ব করে; অন্যটি হল graphical.target এটি গ্রাফিক্যাল ইউজার স্টেট বোঝায়, এটি নির্ভর করে multi-user.target আধিকারিক নথিতে একটি খুব স্পষ্ট ছবি রয়েছে। টার্গেট নির্ভরতা চিত্র

৮. Target এর কনফিগারেশন ফাইল

টার্গেটেরও নিজস্ব কনফিগারেশন ফাইল রয়েছে।

দয়া করে লক্ষ্য করুন, টার্গেট কনফিগারেশন ফাইলে কোন চালানোর কমান্ড নেই। উপরের আউটপুট ফলাফলে প্রধান ক্ষেত্রগুলোর অর্থ নিম্নরূপ।

Requires ফিল্ড: দাবি basic.target একসাথে চলুন।

Conflicts ক্ষেত্র: সংঘাত ক্ষেত্র। যদি rescue.service অথবা rescue.target চলছে, multi-user.target এটা চালানো যাবে না, উল্টোও সত্য।

After প্রতিনিধিত্ব করে multi-user.target এখানে basic.target rescue.service rescue.target এরপর চালু করুন, যদি সেগুলি চালু হয়।

AllowIsolate অনুমতি দেওয়া হয়েছে systemctl isolate অদেশটি পরিবর্তন করুন multi-user.target

নতুন কনফিগারেশন ফাইল সম্পাদনা করার পর পুনরায় চালু করুন।

কনফিগারেশন ফাইল সংশোধন করার পর, কনফিগারেশন ফাইল পুনরায় লোড করতে হবে, তারপর সংশ্লিষ্ট সার্ভিসগুলি পুনরায় চালু করতে হবে।

(সমাপ্ত)

ডকুমেন্টের তথ্য

কপিরাইট ঘোষণা: মুক্ত পুনরুদ্ধার-অবাণিজ্যিক-অপসারিত নয়-স্বাক্ষর বজায় রাখুন ( ক্রিয়েটিভ কমন্স ৩.০ লাইসেন্স

প্রকাশের তারিখ: ২০১৬ সালের ৮ই মার্চ

আপনি সাম্প্রতিককালে ব্যবহার করেছেন:

সংগ্রহ মেনু QQ