প্রারম্ভকালে শেল স্ক্রিপ্ট কীভাবে কার্যকর করা যায়?


13

আমি একটি সার্ভার শুরু করার জন্য একটি স্ক্রিপ্ট তৈরি করেছি (আমার প্রথম প্রশ্ন)। এখন আমি এটি সিস্টেম বুটে চালিত করে সংজ্ঞায়িত সার্ভারটি চালু করতে চাই। এটি করাতে আমার কী করা উচিত?

আমার অনুসন্ধানগুলি আমাকে বলছে যে এই ফাইলটি /etc/init.dলোকেশনটিতে রেখেছি এবং এটি কখন কার্যকর হবে যখন সিস্টেমটি বুট হবে। তবে আমি বুঝতে পারছি না যে শুরুতে প্রথম যুক্তিটি কীভাবে হবে start? ব্যবহার করার জন্য এই পূর্বনির্ধারিত কোথাও startযেমন $1? আমি যদি startallএমন একটি মামলা রাখতে চাই যা স্ক্রিপ্টের সমস্ত সার্ভার শুরু করে, তবে আমি কী কী বিকল্পগুলি পরিচালনা করতে পারি?

আমার স্ক্রিপ্টটি এরকম:

#!/bin/bash

case "$1" in
start)
     start
    ;;
stop)
    stop
    ;;

restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart)"
;;
esac

আমি জানি এটি পুরানো ... তবে শেলটি '#! / বিন / শ' 'নয়' # হওয়া উচিত! (উদাঃ / usr / lib মাউন্ট করা সম্ভব হচ্ছে না)
রিচ হোমোলকা

উত্তর:


19

/etc/init.dস্ক্রিপ্ট ডিরেক্টরি যা এক্সিকিউটেবল স্ক্রিপ্ট প্রদর্শিত হয়। তবে, আপনার সিস্টেমটি শুরু হওয়ার পরে কোনও নির্দিষ্ট ক্রমে স্ক্রিপ্টগুলি চালানোর জন্য আপনাকে /etc/rc#.dডিরেক্টরিতে ফাইল যুক্ত করতে হবে । এখানে উপস্থিত এন্ট্রিগুলি আপনার সিস্টেমে কোন ক্রমে এবং কোন রান স্তরের স্ক্রিপ্টগুলি /etc/init.dচালানো উচিত তা আপনার সিস্টেমকে বলে । এই চার্ট অনুসারে আরসির পরে সংখ্যাটি বোঝায় যে মেশিনটি কোন রান স্তরে চলছে:

http://en.wikipedia.org/wiki/Runlevel

সুতরাং আপনার যদি:

/etc/init.d/importantscript

তারপরে আপনার (খালি) ফাইলগুলি দরকার:

/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript

এস মানেই শুরু, এবং কে মানে হত্যাকাণ্ড। যখন আপনার মেশিনটি শুরু হবে, সিস্টেমটি বলবে "আহা, আমি রানলিভেল 3 এ চলেছি, '/etc/init.d' তে কোন স্ক্রিপ্টগুলি চালিত হওয়া প্রয়োজন এবং কোন ক্রমে প্রয়োজন তা দেখতে rc3.d এ পপ আপ করব" " এই ক্ষেত্রে, সিস্টেমটি 'এস' এবং তারপরে 'এস' এর পরে নম্বর অনুসারে বাছাই করবে এবং '/etc/init.d/importantscript শুরু' সম্পাদন করবে। ২০ টি কেবল অর্ডার করার উদ্দেশ্যে রয়েছে ... আপনার স্ক্রিপ্টটি 'S19' এর পিছনে এবং 'S21' এর সামনে চলবে। আপনি কেবল এইগুলি দ্বারা এই ফাইলগুলি তৈরি করতে পারেন:

sudo touch /etc/rc.d/rc3.d/S20importantscript

এখানে একটি দুর্দান্ত সংক্ষিপ্তসারও রয়েছে: http://www.linux.com/news/enterprise/systems-management/8116-an-intr پيداوار-to-services-runlevels-and-rcd-scriptts


"ln -s /etc/init.d/script" কে আরসিএক্স.ডি / * করা কি বেশি সাধারণ নয়?
ওজমা

8

আপনার --- করতে হবে না এবং --- ফাইল তৈরি করতে হবে না /etc/rc.d/rcN.d/; পরিবর্তে আপনার কী করা উচিত তা আপনার init স্ক্রিপ্ট পড়ার ক্ষেত্রে একটি মন্তব্য দেওয়া হবে

# chkconfig NNN A B

যেখানে NNNরান-লেভেল যার মাধ্যমে আপনি স্ক্রিপ্ট সক্রিয় চান (যেমন, এর সেট 345যদি এটা রান-লেভেল সক্রিয় হচ্ছে 3, 4এবং 5), এবং Aএবং Bশুরু ও স্টপ অগ্রাধিকার আছে। তারপরে chkconfig --add foo(আপনার স্ক্রিপ্টের নাম ধরে নেওয়া foo) /etc/rc.d/rcN.d/যথাযথ নামের সাথে ফাইলগুলি তৈরি করবে ।

এর পরে আপনি ব্যবহার করতে পারেন service foo barপাঠাতে barআপনার স্ক্রিপ্টটি বার্তা (যেমন, start, stopযাই হোক না কেন - যে যেখানে আপনার এর $1থেকে আসে)।


0

Script 1 হ'ল কমান্ড লাইন আর্গুমেন্ট যা আপনার স্ক্রিপ্টে প্রেরণ করা হয়, এটি শুরু, থামানো বা পুনরায় আরম্ভের একটি। ইন openSUSE- এর , আমি যখন রান-লেভেল সম্পাদক অজানা useing স্ক্রিপ্ট মধ্যে অন্যান্য আর্গুমেন্ট পাস তাই আমি মনে করি যে, এই সম্ভবত শুধুমাত্র বেশী আপনি ব্যবহার উচিত একটি বিকল্প না থাকার মনে নেই।

আমি নিজে সেন্টোস ব্যবহার করি না , তবে মনে হচ্ছে প্রোগ্রামটি কী শুরু হয়েছিল তা নিয়ন্ত্রণ করতে কোন রানলেভেল এনটিএসভ হয়

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