রুট হিসাবে বুট করার সময় স্ক্রিপ্টটি কীভাবে চালানো যায়


59

আমার কাছে একটি স্ক্রিপ্ট ছিল যা নেটওয়াল ম্যানেজার ব্যবহার না করে স্বয়ংক্রিয়ভাবে আমার ওয়াইফাই সক্ষম করে, তবে সিস্টেমটি বুট করার সময় আমি স্ক্রিপ্টটিকে মূল হিসাবে চালাতে জানি না। বুট করার সময় আমি কীভাবে স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে চালিত করব?


অটো-স্টার্ট প্রোগ্রামগুলি বেশ কয়েকটি স্থানে বা তেমনিভাবে বা হিসাবে হিসাবে বিভিন্ন ক্ষেত্রে autostartবা *.serviceফাইলগুলিতে কনফিগার করা থাকে । এটি দেখুন: unix.stackexchange.com/a/525845/43233init.dcrontab
নোম মানস

উত্তর:


54

আপনি যে স্ক্রিপ্টটি /etc/init.d ডিরেক্টরিতে চালাতে চান তা স্থান দিন এবং স্ক্রিপ্টটি সম্পাদনযোগ্য করে তুলুন।

chmod 755 myscript

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

যদি শেষ স্ক্রিপ্টটি চালানো হয় rc.localএবং এটির নামকরণ করা হয় S99rc.localতবে আপনাকে আপনার স্ক্রিপ্টটি যুক্ত করতে হবে S99myscript

ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript

প্রতিটি পশ্চাদপটে সামঞ্জস্যপূর্ণ /etc/rc*.dডিরেক্টরিটির ডিরেক্টরিতে প্রতীকী লিঙ্ক রয়েছে /etc/init.d/


1
নোট করুন যে উবুন্টু সার্ভার 14.04 এর অধীনে, উদাহরণটিতে উল্লিখিত /etc/rc2.dপরিবর্তে আমাকে ব্যবহার করা দরকার rc3.d। মনে rc2.dহচ্ছে এটি কেবল গ্রাফিকাল রান স্তর নয়।
ব্র্যাড

1
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.d/etc/rc?.dআপনার ডিফল্ট রানলেভেলের সাথে সম্পর্কিত ডিরেক্টরিটি আপনাকে নিয়ে যাবে ।
কেভিন

1
পরিবর্তে: "যদি শেষ স্ক্রিপ্টটি চালানো হয় rc.localএবং এটির নামকরণ করা হয় S99rc.localতবে আপনাকে আপনার স্ক্রিপ্টটি হিসাবে যুক্ত করতে হবে S99myscript।" আপনি কী বোঝাতে চেয়েছিলেন: "যদি শেষ স্ক্রিপ্টটি চালানো হয় myscriptএবং এটির নামকরণ হয় S99myscriptতবে আপনাকে আপনার স্ক্রিপ্টটি যুক্ত করতে হবে S99myscript" "???
ডোর

6
মনে রাখবেন যে এটি সিস্টেমেডের সাথে কাজ করবে না (অর্থাত্ উবুন্টু 16.04 দিয়ে শুরু হবে)। দেখুন এই পরিবর্তে।
আলেকজান্ডার রেভো

26

কমান্ডটি অন্তর্ভুক্ত করুন /etc/rc.local। এটি ব্যবহার করা হবে যখনই ব্যবহারকারীর রানলেভেল পরিবর্তন হয়।

দ্রষ্টব্য: আপনাকে /etc/rc.local এ সর্বশেষ লাইনের আগে কমান্ডটি লিখতে হবে: "প্রস্থান 0"


3
দ্রষ্টব্য: আপনাকে অন্তিম লাইনের আগে কমান্ডটি রাখতে হবে /etc/rc.localযা এতে অন্তর্ভুক্ত রয়েছে: exit 0
রুব 77

3
/etc/rc.localউবুন্টুতে 15.10 মন্তব্য করেছে যে "এই স্ক্রিপ্টটি প্রতিটি মাল্টিউজার রানলেভেলের শেষে কার্যকর করা হয়।" সুতরাং স্ক্রিপ্ট বুট চলাকালীন কয়েকবার চালানো যেতে পারে, তাই না?
জার্নো

@ জামো, হ্যাঁ, প্রতিটি রানলেভেলে। এটি কীভাবে "এট বুট" চালানোর সাথে সম্পর্কিত তা আমি জানি না, যার অর্থ সাধারণত "বুট করার সময় একবার চালানো"।
erm3nda

17

crontabআপনার স্ক্রিপ্টটি পুনরায় বুট করার পরে চালানোর জন্য একটি বিকল্প ব্যবহার করুন ,

আপনি ক্রোন@reboot কোড যুক্ত করে এটি করতে পারেন

রুট ব্যবহারকারী দ্বারা ক্রন্টব্যাট খুলুন:

$ sudo crontab -e

নীচে পরবর্তী রেকর্ড যুক্ত করুন:

@reboot yourScriptPath 

যা আপনি চান তা করবে।


আপনার অর্থ কি কমান্ড ব্যবহার করা হয়েছে crontab -e, যার জন্য অতিরিক্ত ব্যবহারকারীর সুবিধার দরকার নেই? আমি ভাবছি, যদি এটি স্ক্রিপ্টগুলি চালাতে পারে যা রুট হিসাবে চালানো দরকার।
জার্নো

আমি এটি পরীক্ষা করেছি। এটি স্ক্রিপ্টটি মূল হিসাবে চালায় না।
জার্নো

4
sudo crontab -eপ্রারম্ভকালীন সময়ে স্ক্রিপ্টটিকে রুট হিসাবে চালানোর জন্য আপনাকে কমান্ড চলাকালীন লাইনটি যুক্ত করতে হবে।
জার্নো

অপসারণ করতে ভুলবেন /var/run/crond.rebootনা, না হলে, টাস্কটি কার্যকর করবেন না
অ্যালবার্ট

কেবলমাত্র রেকর্ডের জন্য, আমি নিশ্চিত যে @ জার্নো এটি ইতিমধ্যে জানবে। প্রতিটি ব্যবহারকারীর নিজস্ব ক্রোন টাস্ক থাকে, তাই আপনি যদি এটি ব্যবহারকারীর একটিতে যোগ করেন (সুডো ছাড়াই ক্রন্টব চালানো) স্ক্রিপ্টটি আপনার ব্যবহারকারী দ্বারা চালিত হবে। সুতরাং আপনাকে এটি বুট-এর মূল হিসাবে স্ক্রিপ্টগুলি চালাতে সক্ষম করতে এটি রুট হিসাবে চালানো দরকার।
এডিডিফেট্রো

9

এটি আমার পক্ষে উবুন্টু 17.04-তে কাজ করেছে:

  1. disable_cdromআপনার অবস্থানের জন্য সুবিধাজনক মতো ট্যুর স্ক্রিপ্ট ফাইল তৈরি করুন । আমার ক্ষেত্রে home/yterle/disable_cdrom। আমার ক্ষেত্রে:

    #!/bin/sh
    eject /dev/sr0 -i 1
  2. এটি কার্যকর করা chmod 775 disable_cdrom

  3. নেভিগেট করুন /etc/systemd/systemএবং সেখানে একটি serviceফাইল তৈরি করুন। উদাহরণ স্বরূপsudo gedit /etc/systemd/system/disable_cdrom.service

আমার disable_cdrom.serviceচেহারাটি এরকম:

[Unit]
Description=Disable cdrom

[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom

[Install]
WantedBy=multi-user.target

যেখানে ExecStartআপনার স্ক্রিপ্টটি চালানোর জন্য পয়েন্ট/bin/sh

তারপরে systemctl enable disable_cdrom.servicesystemd পরিষেবা সক্ষম করতে চালান


1
আমি যা খুঁজছিলাম ঠিক systemctl enable disable_cdrom.service
তেমনই

5

/etc/init.d/ এক্সিকিউটেবল অনুমতি সহ আপনার স্ক্রিপ্ট ফাইল অন্তর্ভুক্ত করুন তারপরে বিভিন্ন রান স্তর নির্ধারণ করুন

$ update-rc.d script-name default

এটি আপনার স্ক্রিপ্ট বুট প্রারম্ভকালে রাখবে।


কালি লিনাক্স v2.0 এ আমার জন্য কাজ করে না। মানে update-rc.d script-name enable?
সোপালাজো ডি অ্যারিরেজ

আপডেট-আরসি.ডি <script-name> ডিফল্ট শেল স্ক্রিপ্ট যা আপনি /etc/init.d/ <script-name> এ অনুলিপি করেছেন
এমএস পারমার

4

এটির মতো একটি পাঠ্য ফাইল তৈরি করুন /etc/cron.d/:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

@reboot   root    yourScriptPath

(আপনি yourScriptPathযে স্ক্রিপ্টটি চালাতে চান তাতে আপনার পথটি প্রতিস্থাপন করা উচিত ))


1

স্ক্রিপ্টটি যুক্ত করার ক্ষেত্রে যত্নশীল rc.local- এর কারণে আমি স্প্ল্যাশ স্ক্রিনে আটকে গিয়েছিলাম। টিপলে Alt+ + F1প্রকাশ কি স্প্ল্যাশ পর্দা পিছনে (ইন স্ক্রিপ্ট চালু ছিল rc.localচলমান ছিল)।

আমি এর থেকে বের হতে পারিনি।

  • Ctrl+ Alt+ Delবা
  • Alt+ PrtSc+ Kবা
  • Ctrl+ Alt+F#

কিছুই কাজ করে না।

আমাকে একটি ইউএসবি উবুন্টু চিত্র থেকে বুট করতে হয়েছিল, এটি rc.localফাইল করতে এবং মুছতে আমাকে নিজের অনুমতি দিতে হয়েছিল। আমি অনুমান করি আপনি কী করছেন তা যদি আপনি না জানেন তবে আপনার স্টাফ করা উচিত নয়।

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