কীভাবে স্বয়ংক্রিয়ভাবে পরিষেবা শুরু করবেন, যখন উবুন্টু শুরু হবে?


31

আমি উবুন্টু 12.04 ব্যবহার করছি এবং সিস্টেমটি সাধারণত বুট করা অবস্থায় একটি পরিষেবা শুরু করতে চাই।

'পরিষেবা' হিসাবে আমি কিছু কোড বুঝতে পারি, উদাহরণস্বরূপ সিডি মাই_ডাইরেক্টরি; my_command -Host 0.0.0.0 -port 1234 -arg x যা ঠিক চালানো উচিত যেন এটি কমান্ড লাইনে শুরু হয়েছে। সাধারণ ব্যবহারকারীর হিসাবে পরিষেবাগুলি শুরু করতে হবে, তবে পরিষেবাগুলি রুট হিসাবে শুরু করতে হবে (প্রকৃতপক্ষে, পরিষেবাগুলি ব্যবহারকারীর স্তরে চালানো প্রয়োজন হবে না)।

যখন কোনও 'পরিষেবা' বন্ধ হয়ে যায় তখন আমার আচরণটিও কনফিগার করতে হবে। আমি চাই সেগুলি আমার ক্ষেত্রে একই নির্দেশের সাথে একটি নির্দিষ্ট ডিরেক্টরিতে পুনরায় চালু করা হোক।

সমস্ত সিস্টেম স্বয়ংক্রিয়ভাবে শুরু করা উচিত যখন সিস্টেমটি স্বাভাবিকভাবে শুরু করা হয়, অর্থাত্ যদি পাওয়ার স্যুইচ টিপে থাকে। অন্য কোনও পদক্ষেপের প্রয়োজন হবে না।

ইন্টারনেটে কিছু ডকুমেন্ট ছড়িয়ে আছে তবে তারা সবাই আমাকে বিভ্রান্ত করে। তারা সম্পর্কে কথা বলা init, init.d, rc.d, কিন্তু আমি কখনোই একটি সহজ-থেকে-ফলো ধাপে ধাপে নির্দেশ সহজেই যেমন ভুঁইফোড় ব্যবহার করে একটি পরিসেবা হিসাবে দেখেছি। যদি এটি সহজ হয় তবে এই পদক্ষেপগুলি এখানে দেওয়া থাকলে আমি প্রশংসা করব।

উত্তর:


33

উবুন্টু শুরু হওয়ার সাথে সাথে একটি কাজ স্বয়ংক্রিয়ভাবে শুরু করতে তৈরি করতে, এখানে দেওয়া উদাহরণটি ব্যবহার করুন । লিখিত উদাহরণ হিসাবে, ধরুন /etc/init/testservice.confsudo দিয়ে নিম্নলিখিত ফাইলটি তৈরি করা হয়েছে :

# testservice - test service job file

description "my service description"
author "Me <myself@i.com>"

# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on runlevel [016]

# Automatically restart process if crashed
respawn

# Essentially lets upstart know the process will detach itself to the background
# This option does not seem to be of great importance, so it does not need to be set.
#expect fork

# Specify working directory
chdir /home/user/testcode

# Specify the process/command to start, e.g.
exec python mycommand.py arg1 arg2

প্রক্রিয়াটির ব্যবহার 'ম্যানুয়ালি' শুরু করতে বা থামাতে

sudo start testservice
sudo stop testservice

দেখুন কাজ নিয়ন্ত্রণ কমান্ড


পরিষেবাটি শুরু করতে আমার "স্টার্ট অন স্টার্ট মাউন্টল" দরকার।
মার্টিইনওয়ার্ড

23

ঠিক আছে, অ্যালেক্স, মোদ্দা কথাটি হ'ল লিনাক্সের সমস্ত ইউজারস্পেস প্রসেস initপ্রক্রিয়া দিয়ে শুরু হয়েছে , যার পিড ১. উদাহরণস্বরূপ, pstreeআপনার প্রসেসের গাছটি দেখতে চালান , যার মূলটি ইআরআই .. initআজকাল প্রক্রিয়া প্রয়োগের বিভিন্ন সংস্করণ রয়েছে , সবচেয়ে উল্লেখযোগ্য

  • sysVinit (ক্লাসিকাল আরম্ভ, এখনও পুরানো দেবিয়ান সহ কিছু বিতরণ ব্যবহার করে)
  • পুরানো উবুন্টু এবং কিছু আরএইচইল (রেড হ্যাট) এবং পুরানো ফেডোরার সংস্করণ দ্বারা ব্যবহৃত স্টার্ট আপস স্টার্ট
  • সিস্টেমড ডিআইডি, আধুনিক ফেডোরা, উবুন্টু, দেবিয়ান, আরএইচইল, সুস সংস্করণ দ্বারা ব্যবহৃত

Ditionতিহ্যগতভাবে, ইউনিক্স'স টিআইবি প্রয়োগকারী টিআইএম নামে sysVinitপরিচিত যা ইউনিক্সের https://ru.wikedia.org/wiki/UNIX_S systemm_V সংস্করণ নামে ডাকা হয় । এটি খুব প্রভাবশালী এবং অন্যান্য ইনটগুলি এর সাথে পিছনে সামঞ্জস্যপূর্ণ।

মূলত, sysVinit প্রথমে /etc/inittabফাইল পড়ে , সিদ্ধান্ত নেয়, কোন রানলেভেল চালাতে হয় এবং /etc/init.d/rcস্ক্রিপ্টকে তথাকথিত init স্ক্রিপ্টগুলি চালিত করতে বলে । উদাহরণস্বরূপ, যখন এটি কোনও মাল্টি-ইউজার রেনলেভলে সাধারণত বুট হয়, যা সাধারণত উবুন্টুতে রানলেভেল 2 হয় , /etc/init.d/rcস্ক্রিপ্টগুলি সম্পাদন শুরু করে /etc/rc2.d। ফাইলগুলি সেখানে স্ক্রিপ্টগুলির জন্য কেবল প্রতীকী লিঙ্কগুলি রয়েছে, যখন স্ক্রিপ্টগুলি সেগুলি /etc/init.dডিরেক্টরিতে সংরক্ষণ করা হয় । /etc/rc*.dডিরেক্টরিগুলিতে সেই চিহ্নগুলির নামকরণ নিম্নরূপ। বলুন, আমরা এতে নিম্নলিখিত স্ক্রিপ্ট পেয়েছি /etc/rc2.d:

$ls /etc/rc2.d
S16rsyslog
S17apache2
K02network-manager

এর অর্থ হ'ল, রানলেভেল 2 ইআর প্রক্রিয়াটিতে স্যুইচ করার পরে প্রথমে network-managerপ্রসেসগুলি মেরে ফেলা হয়, কারণ এর স্ক্রিপ্টের নামটি শুরু হয় K- K02network-managerএবং তারপরে প্রক্রিয়া শুরু হয়, যার নাম দিয়ে শুরু হয় S। দুটি সংখ্যা পর Sবা K00 থেকে 99 নম্বর, যা অর্ডার নির্ধারণ করে, প্রক্রিয়া শুরু করা হয়। যেমন rsyslogআগে শুরু হয় apache2, কারণ 16 17 কম (যে অর্থে তোলে হয়, কারণ আপনি Apache নিম্নলিখিত rsyslog এর লগিং ক্ষমতা উপর নির্ভর করতে চান , এইভাবে প্রথমে rsyslog শুরু করা উচিত)। স্ক্রিপ্টগুলি হ'ল ক্যাজুয়াল শেল স্ক্রিপ্ট, এর দ্বারা নির্বাহ করা হয় #!/bin/sh

সুতরাং, মূলত sysVinit শৈলী প্রারম্ভকালে উপর একটি প্রোগ্রাম শুরু করার জন্য, আপনার নিজের স্ক্রিপ্ট লিখতে (এটা কোন উদাহরণ থেকে কপি-পেস্ট, আপনি পেয়েছেন /etc/init.d), এর লাগাতে /etc/init.dএবং একটি যুক্তিসঙ্গত নাম, যেমন অধীনে এটি একটি সিমবলিক লিঙ্ক তৈরি S99mytrojanমধ্যে /etc/rc2.d। /Etc/init.d http://docs.oracle.com/cd/E19683-01/806-4073/6jd67r96g/index.html এ টিপিক্যাল সিসভিট স্ক্রিপ্টগুলির ব্যাখ্যা এখানে রয়েছে

এখন, উবুন্টু ছেলেরা সিদ্ধান্ত নিয়েছে যে তারা init থেকে অতিরিক্ত কার্যকারিতা চায়। তারা একটি দ্রুত বুটিং ওএস চেয়েছিল, তাই তারা চেয়েছিল যে তাদের স্ক্রিপ্টগুলি সমান্তরালভাবে কার্যকর করা হোক; তারা চেয়েছিল মৃত প্রক্রিয়াগুলি স্বয়ংক্রিয়ভাবে পুনরায় চালু করা হোক; তারা প্রক্রিয়াগুলি একে অপরের সাথে ঘটনাবলী দ্বারা স্পষ্টভাবে আহবান করতে চেয়েছিল (যাতে অ্যাপাচি "সিসলগ শুরু" ইভেন্ট দ্বারা চালিত হয়, এবং সিসলগ "ফাইল সিস্টেম মাউন্ট করা" ইভেন্ট ইত্যাদি দ্বারা চালিত হয়, তাই আমাদের কয়েকটি সংখ্যার পরিবর্তে ইভেন্টগুলি 00 রয়েছে) -99)। সুতরাং, তারা আপস্টার্ট তৈরি করেছে এবং এটি এটি কীভাবে কাজ করে তা এখানে । আপস্টার্ট ইনসাইটস স্ক্রিপ্টগুলি /etc/initডিরেক্টরিতে রাখা হয় (এর সাথে বিভ্রান্ত করবেন না /etc/init.d)। আপস্টার্ট সাধারণত চালিত /etc/init.d/rcহয়, তাই এটি আপনার সিজনভিট স্ক্রিপ্টগুলি স্বাভাবিকভাবে কার্যকর করতে চলেছে। তবে যদি আপনি প্রস্থান করার সময় আপনার স্ক্রিপ্টটি পুনরায় গ্রহণ করতে চান - আপস্টার্ট ইভেন্টগুলি আপনার জন্য।

যদিও আমার স্ক্রিপ্টটি কাজ করছে কিনা তা আমি পরীক্ষা করতে পারছি না, আমি মনে করি, আপনার লক্ষ্যগুলির জন্য আপনার নিম্নলিখিত /etc/init/mytrojan.confস্ক্রিপ্টটি লেখা উচিত :

start on runlevel [02]
respawn
exec mytrojan --argument X 

তবে আপনার যদি নির্ভরতা, কমপক্ষে ফাইল সিস্টেম এবং নেটওয়ার্কের প্রয়োজন হয় তবে এর start on runlevel [02]মতো কিছু দিয়ে প্রতিস্থাপন করা বোধগম্য হতে পারে :

start on (local-filesystems and net-device-up IFACE!=lo)

সতর্কতা: আমি এর সঠিকতা যাচাই করিনি, কারণ আমি পারছি না। বিশেষত, আপনার নেটওয়ার্ক সংযোগটি শেষ হয়ে যাওয়ার পরে কীভাবে স্ক্রিপ্ট শুরু করবেন সে সম্পর্কে আমি নিশ্চিত নই (আমি এই সংস্করণটি ব্যবহার করেছি )। "নেটওয়ার্ক আপ আপস্টার্ট" এর জন্য গুগল করার চেষ্টা করুন।


1
এটি লিনাক্সে প্রক্রিয়াটির ইতিহাসের উপর একটি খুব সুন্দর ওভারভিউ, তবে এটি প্রশ্নের দ্বারা উত্তর দেয় না। আমি এখনও একটি আপস্টার্ট প্রক্রিয়া 'তৈরি' করতে জানি না। আমি এটি কেবল ব্যবহার করতে চাই, এটি কীভাবে কাজ করে তার প্রতিটি ক্ষুদ্র বিট বুঝতে পারি না। আমি কেবল একটি সহজ এবং সহজেই ব্যবহারযোগ্য কাজের উদাহরণ পেতে চেয়েছিলাম, কীভাবে একটি প্রক্রিয়া শুরু করা যায় এবং উবুন্টুর উপরের দিকে..আপনি স্বয়ংক্রিয়ভাবে শ্বাস ফেলা যায় l
অ্যালেক্স

@ অ্যালেক্স: একটি নমুনা স্কিপ্ট সহ আপডেট হয়েছে। দ্রষ্টব্য, আমার স্ক্রিপ্ট খুব ভাল ভুল হতে পারে। আমি এটি alexreisner.com/code/upstart এর আত্মায় করেছি
বরিস বুর্কভো

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