বুটে শেষ পরিষেবা হিসাবে আপনি একটি সিস্টেমড পরিষেবা কীভাবে তৈরি করবেন?


26

বহু বছর আগে, আমরা আমাদের স্টার্টআপ-স্ক্রিপ্ট লিখতে পারি /etc/rc.local। সমস্ত সিস্টেম পরিষেবা লোড হওয়ার পরে, আপনার স্ক্রিপ্টটি চলবে।

এখন, আমরা সিস্টেমড ব্যবহার করি, আমাদের rc.localআর নেই। সিস্টেমড সমান্তরালভাবে পরিষেবাটি শুরু করে। আপনি একটি rc.local` অভিনয় করতে নিজের পরিষেবা লিখতে পারেন তবে আপনি নিশ্চিত করতে পারবেন না যে সমস্ত সিস্টেম পরিষেবা লোড হওয়ার পরে এটি চলবে।

এটি করার কোন উপায় আছে? নাকি আমরা ব্যবহার করতে হবে Beforeএবং Aftersystemd হল সেবা ফাইলের মধ্যে?



5
সিস্টেমড, আপস্টার্ট নয় !!
4

নাম এবং সংস্করণ ওএস নির্দিষ্ট করুন?
STTR

ওএস: আর্চ লিনাক্স, সংস্করণ: এন / এ
盖子 盖子

1
@ 比尔 "কেন" শেষ ", আপনি কি স্ক্রিপ্টের নির্ভরতা জানেন না বা আপনি এটি কেবল নিরাপদ থাকতে চান?
পল

উত্তর:


27

ইন systemd এটি ব্যবহার করতে পরামর্শ দেওয়া হয় Before=এবং After=চমত্কারভাবে প্রায় অন্যান্য বেশী আপনার পরিষেবার অর্ডার।

তবে যেহেতু আপনি ব্যবহার না করেই কোনও উপায় চেয়েছিলেন Beforeএবং After, আপনি ব্যবহার করতে পারেন:

Type=idle

যা হিসাবে man systemd.serviceব্যাখ্যা:

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


1
হাই, আমি যদি আগে বা পরে ব্যবহার করতাম তবে সিনট্যাক্সটি বিস্তৃত করার বিষয়ে আপনি কি যত্ন করবেন?
r4ccoon

কিছুটা আলাদা বিষয়, তবে কেউ যদি সিস্টেম প্রক্রিয়াগুলি থেকে পৃথকভাবে ব্যবহারকারী প্রসেসগুলি চালাতে চান তবে Askubuntu.com/a/859583/457417 আছে
বেন

বুট প্রক্রিয়া শেষে সেট /proc/sys/kernel/modules_disabledকরতে পুরোপুরি কাজ 1করেছিল
স্টুয়ার্ট কার্ডাল

0

এটি সত্যই আপনার "বুট করা" সংজ্ঞাটির উপর নির্ভর করে। আমি ধরে নিচ্ছি আপনি গেটটি শুরু হওয়ার সাথে সাথেই এটি চালাবেন। এটি করার জন্য আপনাকে আপনার পরিষেবাটি /etc/systemd/system/getty.target.wants/ডিরেক্টরিতে যুক্ত করতে হবে। আপনার ফাইলটিও এই ডিরেক্টরিতে অন্য পরিষেবাদির অনুরূপ কোড ব্যবহার করছে তাও নিশ্চিত করা উচিত। বুটআপ এবং শাটডাউনতে একটি কাস্টম পরিষেবা চালাতে (কেবলমাত্র আমার মাদারবোর্ড বুজারটি বীপ করে) আমি নিম্নলিখিত স্ক্রিপ্টটিতে ব্যবহার করি/etc/systemd/system/getty.target.wants/service_name.service

[Unit]
After=systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service
Before=getty.target
IgnoreOnIsolate=yes

[Service]
ExecStart=/usr/bin/myinitscript.sh start
ExecStop=/usr/bin/myinitscript.sh stop
Type=oneshot
RemainAfterExit=true

[Install]
WantedBy=basic.target

/usr/bin/myinitscript.sh এক্সিকিউটেবল এবং শুরুতে একটি শেবাং রয়েছে।

মনে রাখবেন যে বুটে এই মুহুর্তে সবকিছু শুরু করা হবে না, তবে এটি সেই বিন্দু যেখানে লগন প্রম্পটটি ব্যবহারকারীর কাছে উপস্থিত হবে

যদিও এটি ব্যবহার করে Before=এবং After=, এটি আমার জন্য অনেক বেশি বোধগম্য ছিল এবং আসলে কাজ করে; উপরের উত্তরটি যথেষ্ট তথ্যবহুল আমি পাইনি। এটি আপনাকে পছন্দসই পরিষেবাতে সীমাবদ্ধ না রেখে উভয় ExecStart=এবং ব্যবহারের অনুমতি দেয় ।ExecStop=Type=simple


-2

আমি নির্দিষ্টকরণ বা আর্চলিনাক্সের সাথে পরিচিত নই, তবে সাধারণভাবে সিস্টেমড কীভাবে পরিচালনা করবেন তা এখানে।

ভাল, মূলত systemd হ'ল /etc/init.d/ এর স্ক্রিপ্টগুলির সংকলন যা /etc/rcX.d থেকে সিমলিংক দ্বারা চিহ্নিত করা হয়, যেখানে এক্স রান স্তরটির সংখ্যা। সিমলিংকগুলি নীচের ফর্ম্যাটটিতে রয়েছে:

[কে | এস] + এনএন + [স্ট্রিং]

কোথায়:

  • এনএন এমন একটি সংখ্যা যা এই স্ক্রিপ্টগুলি চালিত করে তা নির্ধারণ করে
  • স্ট্রিংটি স্ক্রিপ্টের নাম হিসাবে এটি /etc/init.d/ এ প্রদর্শিত হয়
  • এবং পরিশেষে কে বা এস কমান্ডটি নির্ধারণ করুন যা স্ক্রিপ্টটি সহ আহ্বান করা হয়েছে: যথাক্রমে থামুন বা শুরু করুন।

সুতরাং, আপনি যদি চান যে আপনার স্ক্রিপ্টটি বুট সিকোয়েনে শেষের দিকে চালিত হয়, আপনার নিম্নলিখিতগুলি করা দরকার:

  1. আপনার স্ক্রিপ্টটি /etc/init.d/ এ রাখুন এবং এটিকে সম্পাদনযোগ্য করে তোলেন
  2. লক্ষ্যটি রানলেভের নির্ধারণ করুন স্ক্রিপ্টটি শুরু হওয়া উচিত (টিপিকভাবে কনসোলের জন্য 2 এবং গ্রাফিকাল ইউজার ইন্টারফেসের জন্য 5)। এরকম কিছু দিয়ে নির্ধারণ করা যায়runlevel
  3. এই রানলেলেতে ইতিমধ্যে কী স্ক্রিপ্ট রয়েছে সেদিকে একবার নজর দিন ls /etc/rc<target runlevel>.d/এবং একটি দ্বি-সংখ্যা নির্বাচন করুন যা ইতিমধ্যে অন্য যে কোনও সংখ্যার চেয়ে বড়।
  4. আপনার ডিস্ট্রিবিউশন সম্পর্কিত নির্দিষ্ট ইউটিলিটি যেমন update-rc.dডেবিয়ান ভিত্তিক বা chkconfigফেডোরার মতো বা ম্যানুয়ালি ব্যবহার করে, আপনার আরআর স্ক্রিপ্টে একটি সিমিলিংক /etc/rc.d/S তৈরি করুন।

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

1
প্রথম দিন থেকেই সিস্টেডিটের সাথে সামঞ্জস্যপূর্ণ হওয়ার লক্ষ্য নেই to
lzap
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.