এই নিবন্ধে, আমরা Linux CentOS/RHEL 7/8-এ স্বয়ংক্রিয়ভাবে শুরু করার জন্য পরিষেবা এবং স্ক্রিপ্টগুলি কীভাবে কনফিগার করতে হয় তার প্রাথমিক বিষয়গুলি শিখব। বিশেষ করে, আমরা systemd এর সাথে পরিচিত হব ডেমন, স্টার্টআপ থেকে কীভাবে পরিষেবাগুলি যোগ করতে বা সরাতে হয় তা শিখুন এবং লিনাক্সে বুটে স্ক্রিপ্ট বা ডেমন শুরু করার বিকল্প উপায়গুলি বিবেচনা করুন।
নিবন্ধটির লক্ষ্য হল আপনাকে লিনাক্সে স্বয়ংক্রিয়ভাবে শুরু হওয়া পরিষেবা বা স্ক্রিপ্টগুলির তালিকা দ্রুত খুঁজে পেতে, স্টার্টআপে আপনার পরিষেবা বা স্ক্রিপ্ট যোগ করতে বা কিছু অ্যাপের স্বয়ংক্রিয় স্টার্টআপ অক্ষম করতে শেখানো।
লিনাক্সে সিস্টেমড পরিষেবাগুলি পরিচালনা করতে Systemctl ব্যবহার করে
সর্বাধিক জনপ্রিয় লিনাক্স ডিস্ট্রোস (CentOS, RHEL, Debian, Fedora, এবং Ubuntu) systemd ব্যবহার করে init.d এর পরিবর্তে স্টার্টআপ ডেমন . সিস্টেমড একটি লিনাক্স সার্ভিস ম্যানেজার যা অন্যান্য ডেমন শুরু করতে এবং তাদের পরিচালনা করতে ব্যবহৃত হয়। এটি /etc/systemd/system
থেকে ইউনিট ফাইল ব্যবহার করে (init.d /etc/init.d/
থেকে ব্যবহৃত স্ক্রিপ্ট ) সিস্টেমড আপনাকে ওএস বুটে পরিষেবা স্টার্টআপকে সমান্তরাল করার অনুমতি দেয়।
systemd পরিচালনা করতে, systemctl কমান্ড ব্যবহার করা হয়।
প্রথমত, সিস্টেম বুট করার পরে আমরা systemd-এ উপলব্ধ ইউনিটগুলির তালিকা পরীক্ষা করব :
systemctl list-units
আপনি এই কমান্ডটি ব্যবহার করে ইউনিট ফাইলের তালিকা পেতে পারেন:
systemctl list-unit-files
এই কমান্ডটি সমস্ত উপলব্ধ ইউনিট ফাইল প্রদর্শন করবে.
সক্রিয় পরিষেবা এবং তাদের অবস্থার তালিকা প্রদর্শন করতে, এই কমান্ডটি চালান:
# systemctl list-units -t service
যেহেতু কিছু ইউনিট স্টার্টআপের পরে নিষ্ক্রিয় হয়ে যেতে পারে, আপনি —সমস্ত ব্যবহার করে সম্পূর্ণ তালিকা পেতে পারেন বিকল্প।
# systemctl list-units --all
UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ● exim.service not-found inactive dead exim.service firewalld.service loaded active running firewalld - dynamic firewall daemon [email protected] loaded active running Getty on tty1 ● iptables.service not-found inactive dead iptables.service Bring up/down networking ● NetworkManager-wait-online.service not-found inactive dead
আপনি তালিকা থেকে দেখতে পাচ্ছেন, এমনকি ডিস্কে পাওয়া যায়নি এমন পরিষেবাগুলিও প্রদর্শিত হয়৷
৷এছাড়াও, আপনি কিছু অন্যান্য পতাকা ব্যবহার করতে পারেন, উদাহরণস্বরূপ:
- —রাজ্য — ডেমন অবস্থা সনাক্ত করতে ব্যবহৃত হয়:লোড, সক্রিয়, সাব
- —টাইপ — প্রকার অনুসারে ইউনিট ফিল্টার করার অনুমতি দেয়
উদাহরণ:
systemctl list-units --all --state=active
—শুধুমাত্র সক্রিয় সিস্টেমড ইউনিটের তালিকা প্রদর্শন করুন
systemctl list-units —type=service
— পরিষেবাগুলি
সিস্টেমড-এ একটি পরিষেবা কীভাবে তৈরি করবেন?
পরিষেবাগুলি পরিচালনা করতে, systemd একটি বিশেষ সিনট্যাক্স ব্যবহার করছে। আপনাকে অবশ্যই .service যোগ করতে হবে একটি পরিষেবার নামের পরে। যেমন:
# systemctl enable nginx.service
- কমান্ডটি এনজিনেক্স ওয়েব সার্ভারকে স্টার্টআপে যোগ করে
এই কমান্ডটি systemd-এ পরিষেবা কমান্ডে নির্দিষ্ট করা একটি ফাইলের একটি প্রতীকী লিঙ্ক তৈরি করবে স্টার্টআপ ডিরেক্টরি।
# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.serviceকমান্ডের আউটপুট ডিরেক্টরিটি দেখায়, যেখানে পরিষেবা ফাইলের সিমলিঙ্ক তৈরি করা হয়েছে।
স্টার্টআপে একটি পরিষেবা যোগ করা হয়েছে কিনা তা পরীক্ষা করার জন্য, আপনি তার স্থিতি পেতে পারেন:
systemctl status nginx.service
আউটপুটে নিম্নলিখিত লাইনটি নোট করুন:
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
সক্ষম৷ মান মানে এই পরিষেবাটি লিনাক্স স্টার্টআপে যোগ করা হয়েছে। পরিষেবাটি স্বয়ংক্রিয়ভাবে শুরু না হলে, আপনি অক্ষম দেখতে পাবেন৷ এখানে।
সিস্টেমড-এ একটি পরিষেবা কীভাবে নিষ্ক্রিয় করবেন?
আপনি স্টার্টআপ থেকে একটি পরিষেবা সরাতে পারেন যাতে এটি লিনাক্স বুটে শুরু না হয় (যদিও পরিষেবাটি নিজেই সরানো হয় না)। পরিষেবার স্টার্টআপ নিষ্ক্রিয় করতে, নিম্নলিখিত কমান্ডটি চালান:
# systemctl disable your_service
উদাহরণস্বরূপ, nginx অটোস্টার্টআপ নিষ্ক্রিয় করতে:
# systemctl disable nginx.service
Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service
এটি করার পরে, একটি পরিষেবা ফাইলের সিমলিংক সিস্টেমড ডিরেক্টরি থেকে সরানো হবে। আপনি নিশ্চিত করতে পারেন যে পরিষেবাটি স্বয়ংক্রিয়ভাবে শুরু হয়েছে কিনা:
# systemctl is-enabled nginx
সিস্টেমড দিয়ে ইউনিট মাস্ক করবেন কীভাবে?
আমি কিছু দুষ্ট পরিষেবা পেয়েছি যেগুলি নিষ্ক্রিয় করার পরেও স্টার্টআপে থেকে গেছে এবং লিনাক্স রিবুট করার পরে শুরু হয়েছে। এই সমস্যা সমাধানের জন্য, আপনি একটি পরিষেবা মাস্ক করতে পারেন:
# systemctl mask nginx.service
তারপর এটি ম্যানুয়ালি বা OS পুনরায় চালু হওয়ার পরে শুরু হবে না:
# systemctl mask nginx.service
Created symlink from /etc/systemd/system/nginx.service to /dev/null.
# service nginx restart
Redirecting to /bin/systemctl restart nginx.service Failed to restart nginx.service: Unit is masked.
আপনি এই কমান্ডটি ব্যবহার করে একটি পরিষেবা আনমাস্ক করতে পারেন:
# systemctl unmask nginx.service
Removed symlink /etc/systemd/system/nginx.service.
যদি কোনও পরিষেবা মাস্ক করার পরে আপনি আপনার ইউনিট ফাইলগুলি পরীক্ষা করেন, আপনি দেখতে পাবেন যে পরিষেবাটি মাস্কড হিসাবে চিহ্নিত করা হয়েছে :
Rc.local দিয়ে স্ক্রিপ্ট বা পরিষেবা চালান
Linux বুটে বিভিন্ন স্ক্রিপ্ট চালানোর জন্য, rc.local প্রায়ই ব্যবহৃত হয়।
স্ক্রিপ্ট ছাড়াও, rc.local ব্যবহার করে আপনি পরিষেবাগুলিও চালাতে পারেন, এমনকি যেগুলি systemd ব্যবহার করা শুরু হয়েছে৷ . আমি জানি না কেন আপনি rc.local ব্যবহার করবেন, যদি সিস্টেমড থাকে তবে এখানে কয়েকটি উদাহরণ দেওয়া হল।
প্রথমত, /etc/rc.local এক্সিকিউটেবল হতে হবে:
chmod +x /etc/rc.local
সিস্টেমড অটোস্টার্টে Rc.local যোগ করতে হবে:
systemctl enable rc-local
এবং আমরা nginx শুরু করতে একটি কমান্ড যোগ করতে পারি rc.local-এ ওয়েব সার্ভার :
service nginx start
কিন্তু আমি কদাচিৎ rc.local ব্যবহার করি সেবা শুরু করতে। প্রায়শই rc.local একটি স্ক্রিপ্ট শুরু করতে বা একবার কমান্ড চালানোর জন্য ব্যবহৃত হয়।
উদাহরণস্বরূপ, আমি একটি স্ক্রিপ্ট তৈরি করেছি /root/test.sh এটি কিছু করে এবং আমি বুট করার পরেই এটি চালাতে চাই। rc.local ফাইলে নিম্নলিখিত লাইন যোগ করুন:
sh /root/test.sh
CentOS 7 দিয়ে শুরু করে, বিকাশকারীরা নির্দেশ করে যে rc.local এটি একটি অপ্রচলিত ডেমন এবং স্ক্রিপ্ট বা পরিষেবা শুরু করার জন্য এটি ব্যবহার করার পরামর্শ দেওয়া হয় না। কিন্তু এটি কাজ করার সময় আমি এটি ব্যবহার করি কারণ এটি খুবই সহজ৷
সিস্টেমড দিয়ে কীভাবে একটি লিনাক্স পরিষেবা তৈরি করবেন?
আপনি আপনার নিজের ডেমন তৈরি করতে পারেন এবং systemd. এর মাধ্যমে এটি পরিচালনা করতে পারেন
উদাহরণস্বরূপ, আপনি একই স্ক্রিপ্ট শুরু করতে চান (/root/test.sh ) প্রতিবার সিস্টেম রিবুট হলে। আমাদের নতুন পরিষেবার একটি ফাইল তৈরি করে শুরু করা যাক:
touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service
এখানে ফাইলের বিষয়বস্তু রয়েছে:
[Unit] Description=Template Settings Service After=network.target [Service] Type=oneshot User=root ExecStart=/root/test.sh [Install] WantedBy=multi-user.target
প্রধান পরামিতি হল:
User
- একটি ব্যবহারকারীর অ্যাকাউন্ট থেকে ডেমন শুরু হয়
Type=oneshot
— অন্য ইউনিটের সাথে চালিয়ে যাওয়ার আগে systemd-এর প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করা উচিত
এটি পরীক্ষা করে পুনরায় চালু করুন:# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service
● test-script.service - Test Loaded: loaded (/etc/systemd/system/test-script.service; disabled; vendor preset: disabled) Active: active (running)
পরিষেবাটি ভালভাবে কাজ করলে, এটিকে সিস্টেমড স্টার্টআপে যোগ করুন :
# systemctl enable test-script.service
Created symlink from /etc/systemd/system/multi-user.target.wants/test-script.service to /etc/systemd/system/test-script.service.
এইভাবে, আপনি অটোস্টার্টে যেকোনো স্ক্রিপ্ট যোগ করতে পারেন এবং সিস্টেমডের মাধ্যমে সেগুলি পরিচালনা করতে পারেন।
ক্রন ব্যবহার করে কিভাবে স্ক্রিপ্ট চালাবেন?
আপনি যদি কিছু ফ্রিকোয়েন্সিতে একটি স্ক্রিপ্ট বা কমান্ড চালাতে চান তবে আপনি cron ব্যবহার করতে পারেন :
crontab -e
— একটি ক্রোন টাস্ক টেবিল পরিবর্তন করতে একটি সম্পাদক খোলে
এবং আপনি এখানে একটি টাস্ক যোগ করুন, উদাহরণস্বরূপ:
* * * * * /root/test.sh
— মিনিটে একবার একটি স্ক্রিপ্ট চালানোর জন্য।
আপনি একটি ওয়াচ-ডগ লিখতে পারেন স্ক্রিপ্ট যা পরিষেবার স্থিতি পরীক্ষা করবে এবং পরিষেবাটি চলমান না হলে, স্ক্রিপ্টটি এটি শুরু করবে। আমি আমার কিছু প্রোজেক্টে একইভাবে ব্যবহার করছি।
ক্রনে সমস্ত কাজের তালিকা প্রদর্শন করতে, কমান্ডটি চালান:
# crontab -l
* * * * * /root/test.sh
ক্রোন কাজগুলিকে ক্রমানুসারে চালানোর জন্য উপলব্ধ সময়ের মান:
- মিনিট:0-59
- ঘন্টা:0-59
- এক মাসের দিন:1-31
- মাস:1-12
- এক সপ্তাহের দিন:0-7 (0 বা 7 রবিবার)
আমাদের টাস্কে, স্ক্রিপ্টটি মিনিটে একবার চালানো হয়, তাই সেখানে *তারকা* আছে।
আপনি cron-এর একটিতেও স্ক্রিপ্ট রাখতে পারেন ডিরেক্টরি:
- /cron.daily – একটি স্ক্রিপ্টের জন্য দিনে একবার চালানো হয়
- /cron.hourly – একটি স্ক্রিপ্টের জন্য ঘন্টায় একবার চলে
- /cron.monthly — মাসে একবার চালানো স্ক্রিপ্টের জন্য
- /cron.weekly — সপ্তাহে একবার চালানো স্ক্রিপ্টের জন্য
নির্দিষ্ট ডিরেক্টরির স্ক্রিপ্টগুলি স্বয়ংক্রিয় সময়সূচী অনুসারে চালানো হবে৷
ব্যাশ স্টার্টআপ স্ক্রিপ্ট:.bashrc
আপনি যদি SSH শুরু করার সময় কিছু ক্রিয়া সম্পাদন করতে চান কনসোল, আপনি .bash_profile-এ যেকোনো কমান্ড বা স্ক্রিপ্ট যোগ করতে পারেন অথবা .bashrc ফাইল তাত্ত্বিকভাবে, আপনি এই ফাইলগুলির যে কোনওটিতে অ্যাকশন যুক্ত করতে পারেন, এটি যে কোনও ক্ষেত্রে চালানো হবে। সাধারণত, আপনার প্রয়োজনীয় জিনিসগুলি .bashrc-এ যোগ করা হয় এবং .bashrc .bash_profile থেকে শুরু হয়৷
আমি .bashrc ফাইলে nginx ওয়েব পরিষেবা পুনরায় চালু করার জন্য একটি কমান্ড যোগ করেছি:
service nginx restart
তারপর আমি ফাইলটি সংরক্ষণ করেছি এবং SSH সেশনটি পুনরায় চালু করেছি:
আপনি দেখতে পাচ্ছেন, টার্মিনাল শুরু করার সময়, ওয়েব সার্ভারটি পুনরায় চালু করা হয়েছে। টার্মিনাল শুরু করার সময় কি কাজ করা যেতে পারে? এটি কিছু অতিরিক্ত টুল হতে পারে, যেমন আপটাইম সার্ভার চেক:
অথবা আপনি যদি নির্দিষ্ট ডিরেক্টরিতে যেতে চান এবং mc শুরু করতে চান ssh কনসোল চালানোর সময়, .bashrc-এ নিম্নলিখিত যোগ করুন :
cd /var/
mc
আশা করি, লিনাক্সে লিনাক্স পরিষেবা বা স্ক্রিপ্ট স্টার্টআপ কীভাবে পরিচালনা করবেন সে সম্পর্কে এই নিবন্ধটি আপনার জন্য সহায়ক হয়েছে (এই নিবন্ধটি CentOS এবং RHEL-এর জন্য লেখা হয়েছিল, তবে অন্যান্য ডিস্ট্রোগুলির জন্য উপযুক্ত)। আমি নিশ্চিত যে এই তথ্যটি লিনাক্স সিস্টেম অ্যাডমিনিস্ট্রেশনের মূল বিষয়গুলি অধ্যয়নরত লোকদের জন্য কার্যকর হবে৷
৷