শেল স্ক্রিপ্ট ব্যবহার করে সিস্টেমডে কীভাবে নতুন পরিষেবা ইউনিট তৈরি এবং চালানো যায়


কয়েক দিন আগে, আমি একটি সেন্টোস 7 32-বিট ডিস্ট্রো পেরিয়ে এসেছি এবং এটি পুরানো 32-বিট মেশিনে পরীক্ষা করার আকাঙ্ক্ষা অনুভব করেছি। বুট করার পরে আমি বুঝতে পারি যে এটিতে একটি ত্রুটি রয়েছে এবং এটি নেটওয়ার্ক সংযোগটি হারাচ্ছে, যা আমাকে বুট করার পরে প্রতিবার ম্যানুয়ালি "আপ" করতে হয়েছিল। সুতরাং, প্রশ্নটি ছিল আমি কীভাবে এই কাজটি করে একটি স্ক্রিপ্ট সেট করব, প্রতিবার আমার মেশিনটি বুট করার সময় চলছে?

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

এই নিবন্ধটিতে, আমি ব্যাখ্যা করছি যে সিস্টেমডে একটি "পরিষেবা ইউনিট" কী, এটি তৈরি এবং চালানো কত সহজ। আমি "টার্গেটগুলি" কী, কেন আমরা তাদের "ইউনিটগুলির সংগ্রহ" এবং তাদের "চায়" কী তা সহজ করার চেষ্টা করব। শেষ পর্যন্ত আমরা বুট পদ্ধতির পরে আমাদের নিজস্ব স্ক্রিপ্টটি চালানোর জন্য কোনও পরিষেবা ইউনিটের সুবিধা নিচ্ছি।

এটি স্পষ্টতই যে আপনার কম্পিউটারটি যে পরিষেবাগুলি দেয় সেগুলির কারণে কার্যকর এবং এই কার্যকারিতাটি বজায় রাখতে অনেকগুলি পরিষেবাকে কম্পিউটার বুট হিসাবে ডেকে বিভিন্ন স্তরে পৌঁছাতে হবে। কম্পিউটারটি যখন উদ্ধার স্তরের (রানলেভেল 0) এবং অন্যরা যখন মাল্টি-ইউজার স্তরে পৌঁছায় (রানলেভেল 3) পৌঁছায় তখন অন্যান্য পরিষেবাদি সম্পাদন করতে বলা হয়। আপনি লক্ষ্যগুলি হিসাবে এই স্তরগুলি কল্পনা করতে পারেন।

একটি সহজ উপায়ে লক্ষ্য হল পরিষেবা ইউনিটগুলির একটি সংগ্রহ। আপনি যদি আপনার গ্রাফিকাল.আর্টেজ স্তরে চলমান পরিষেবা ইউনিটগুলি একবার দেখতে চান তবে টাইপ করুন:

# systemctl --type=service

আপনি দেখতে পাচ্ছেন কিছু পরিষেবাদি সর্বদা সক্রিয় এবং "চলমান" থাকে, আবার অন্যরা এক সময় চালায় এবং সমাপ্ত হয় (বেরিয়ে যায়)। আপনি যদি কোনও পরিষেবার স্থিতি পরীক্ষা করতে চান তবে টাইপ করুন:

# systemctl status firewalld.service

আপনি দেখতে পাচ্ছেন যে আমি ফায়ারওয়াল্ড। সার্ভিস এর স্থিতি পরীক্ষা করেছি (পরামর্শ: আপনি পরিষেবাটির নামের জন্য অটো-সম্পূর্ণ ব্যবহার করতে পারেন)। এটি আমাকে জানিয়ে দেয় যে ফায়ারওয়াল্ড পরিষেবা সর্বদা চলমান থাকে এবং এটি সক্ষম হয় is

সক্ষম এবং অক্ষম অর্থ পরবর্তী বুট চলাকালীন পরিষেবাটি স্থায়ীভাবে লোড হবে বা হবে না। অন্যদিকে কোনও পরিষেবা শুরু করা এবং বন্ধ করাতে বর্তমান সেশনের সীমাবদ্ধতা রয়েছে এবং এটি স্থায়ী নয় not

উদাহরণস্বরূপ, যদি আপনি টাইপ করেন:

# systemctl stop firewalld.service
# systemctl status firewalld.service

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

আপনি যদি ফোল্ডারে যান:

# cd /etc/systemd/system
# ls -l

আপনি ইউনিট পরিষেবাদির কিছু লিঙ্ক ফাইল এবং লক্ষ্যটির "চায়" এর কয়েকটি ডিরেক্টরি দেখতে পারেন। উদাহরণস্বরূপ: বুট পদ্ধতিটি তার স্তরে পৌঁছলে মাল্টি-ইউজার টার্গেটটি কী লোড হতে চায়, ডিরেক্টরিতে /etc/systemd/system/m মাল্টি- ইউজার.আর্টেজ.ওয়ান্টস/নামের তালিকাতে তালিকাভুক্ত করা হয়।

# ls multi-user.target.wants/

আপনি দেখতে পাচ্ছেন এটিতে কেবল পরিষেবাদিই নয় তবে অন্যান্য লক্ষ্যগুলিও সেগুলি সংগ্রহ করে।

আসুন নামের সংযোগ.সার্ভিস সহ একটি পরিষেবা ইউনিট তৈরি করি।

# vim connection.service

এবং নিম্নলিখিতটি লিখুন (সন্নিবেশ মোডের জন্য "আমি" টিপুন), এটি সংরক্ষণ করুন এবং "এসকে" এবং ": wq!" সহ প্রস্থান করুন ):

[Unit]
Description = making network connection up
After = network.target

[Service]
ExecStart = /root/scripts/conup.sh

[Install]
WantedBy = multi-user.target

উপরেরটি ব্যাখ্যা করার জন্য: আমরা সার্ভিস টাইপের একটি ইউনিট তৈরি করেছি (আপনি টার্গেট টাইপের ইউনিটও তৈরি করতে পারেন), আমরা এটি নেটওয়ার্ক.তারের পরে লোড করার জন্য সেট করেছি (আপনি বুঝতে পারবেন যে বুট করার পদ্ধতিটি একটি সংজ্ঞায়িত সহ লক্ষ্যে পৌঁছে যায়) অর্ডার) এবং আমরা প্রতিটি সময় পরিষেবাটি কনুপ.শ নামের সাথে একটি বাশ স্ক্রিপ্ট কার্যকর করতে শুরু করি যা আমরা তৈরি করতে যাচ্ছি।

মজা শুরু হয় শেষ অংশ [ইনস্টল] দিয়ে। এটি বলে যে এটি "মাল্টি-ইউজার.আরগেট" দ্বারা চাওয়া হবে। সুতরাং আমরা যদি আমাদের পরিষেবা সক্ষম করে থাকি তবে সেই পরিষেবার একটি প্রতীকী লিঙ্কটি বহু- user.target.wants ফোল্ডারের অভ্যন্তরে তৈরি হবে! বুঝেছি? এবং আমরা যদি এটি অক্ষম করি তবে সেই লিঙ্কটি মুছে ফেলা হবে। খুবই সোজা.

কেবল এটি সক্ষম করুন এবং পরীক্ষা করুন:

# systemctl enable connection.service

এটি আমাদের জানিয়ে দেয় যে মাল্টি-ইউজার.আর্টারজেট.ওয়ান্টস ফোল্ডারে প্রতীকী লিঙ্কটি তৈরি করা হয়েছে। এটি পরীক্ষা করুন:

# ls multi-user.target.wants/

আপনি দেখতে পাচ্ছেন "সংযোগ.সার্ভিস" পরবর্তী বুটিংয়ের জন্য প্রস্তুত, তবে আমাদের প্রথমে স্ক্রিপ্ট ফাইলটি তৈরি করতে হবে।

# cd /root
# mkdir scripts
# cd scripts
# vim conup.sh

ভিমের ভিতরে নিম্নলিখিত লাইনটি যুক্ত করুন এবং এটি সংরক্ষণ করুন:

#!/bin/bash
nmcli connection up enp0s3

অবশ্যই যদি আপনি চান যে আপনার স্ক্রিপ্টটি অন্য কিছু চালিত করে, আপনি দ্বিতীয় লাইনের পরিবর্তে যা খুশি টাইপ করতে পারেন।

উদাহরণ স্বরূপ,

#!/bin/bash
touch /tmp/testbootfile

এটি/টিএমপি ফোল্ডারের ভিতরে একটি ফাইল তৈরি করবে (কেবলমাত্র আপনার পরিষেবাটি কাজ করছে কিনা তা পরীক্ষা করতে)।

আমাদের অবশ্যই স্ক্রিপ্টটি কার্যকর করতে হবে:

# chmod +x conup.sh

এখন আমরা প্রস্তুত। আপনি যদি পরবর্তী বুট না হওয়া পর্যন্ত অপেক্ষা না করতে চান (এটি ইতিমধ্যে সক্ষম) আমরা বর্তমান সেশন টাইপিংয়ের জন্য পরিষেবাটি শুরু করতে পারি:

# systemctl start connection.service

ভয়েলা! আমার সংযোগ শেষ!

আপনি যদি কেবল স্ক্রিপ্টটির কার্যকারিতা পরীক্ষা করতে "স্পর্শ/tmp/testbootfile" কমান্ডটি লিখতে পছন্দ করেন তবে আপনি এই ফাইলটি/টিএমপি ফোল্ডারের ভিতরে তৈরি দেখতে পাবেন।

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