শাটডাউন / রিবুট করার আগে কমান্ড কার্যকর করুন [সদৃশ]


19

আমার কাছে একটি মেশিন রয়েছে যা বেশ কয়েকটা ভিড় ভিএম চালাচ্ছে। আমার সমস্যাটি হ'ল আমার মেশিনটি শাটডাউন বা রিবুট করার আগে কখনও কখনও আমি সেই ভিএমগুলি বন্ধ করে দিতে ভুলে যাই। যার কারণে আমার মেশিনটি এই বার্তায় আটকে যায়:waiting for vboxnet0 to become free

আমি সমাধানগুলি অনুসন্ধান করেছি এবং আমি এই পৃষ্ঠাটি পেয়েছি:

http://en.kioskea.net/faq/3348-ubuntu-executing-a-script-at-startup-and-shutdown

তারা শাটডাউন করার জন্য যা চেষ্টা করেছি, কিন্তু তা কার্যকর হয়নি।

আমি এই কমান্ডের জন্য একটি sh ফাইল লিখেছি:

#!/bin/bash

cd ~/workspace/git/mediaservice
vagrant halt

কোনও পরামর্শ?


4
লিঙ্কটিতে থাকা পদ্ধতিটি বৈধ এবং সমস্ত লিনাক্স সংস্করণে কাজ করে যাতে আপনার স্ক্রিপ্টটি ভুল;) ব্যবহারকারীর দ্বারা এটি সম্পন্ন হওয়ায় ব্যবহারকারী শাটডাউনে পরিচিত হয় না। সুতরাং "~" ফেলে দিন এবং এটি একটি পুরো পথ তৈরি করুন।
রিনজউইন্ড

এটা কি কাজ করে? আমি gist.github.com/ymc-geha/8416723 এর মতো একটি অনুরূপ ম্যানুয়েল অনুসরণ করেছি তবে উবুন্টু 14.04
ইউজার 2135804

@ ব্যবহারকারী2135804 আমি ভেবেছিলাম এটি হয়েছে .. তবে বাস্তবে এটি ভ্যাগ্র্যান্টের পক্ষে কাজ করে না .. আমি অন্যান্য জিনিস দিয়ে চেষ্টা করেছি এবং এটি ভাল কাজ করেছে।
সেরপ্রো

1
যাইহোক, আপনি যে বাগটি বর্ণনা করছেন তা এখানে
গ্যারেট

1
বাগ রিপোর্টে দেখা গেছে, এটি ঠিক করা হয়েছে এবং ভার্চুয়ালবক্স ৪.৩.২৯ এর সাথে অন্তর্ভুক্ত করা হবে।
গ্যারেট

উত্তর:


12

যদি আপনার অসম্পূর্ণ ভিএমগুলি ভার্চুয়ালবক্স ব্যবহার করে থাকে তবে আপনি / ইত্যাদি / ডিফল্ট / ভার্চুয়ালবক্সকে সংশোধন করতে এবং পড়তে থাকা লাইনটি পরিবর্তন করতে পারেন:

SHUTDOWN_USERS=""

প্রতি

SHUTDOWN_USERS="all"

এটি আমার জন্য উবুন্টু 14.04 এ স্থির করেছে


1
আসলে এর সাথে যুক্ত ভার্চুয়াল বক্সে একটি ওপেন টিকিট রয়েছে। ভার্চুয়ালবক্স.আর্গ / টিকেট / 12264 । আমি SHUTDOWN_USERS=`cut -d: -f1 /etc/passwd`পরিবর্তেSHUTDOWN_USERS="all"
চালানোর

ভার্চুয়ালবক্স ব্যবহার করে ভ্যাগ্র্যান্টের সাথে আমি উবুন্টু 14.04 এও রয়েছি, তবে আমার কাছে কোনও /etc/default/virtualboxফাইল নেই ...
গ্যারেট

21

শাটডাউন বা পুনরায় বুট করার সময় কোনও স্ক্রিপ্ট কার্যকর করতে:

  1. আপনার স্ক্রিপ্টটি /etc/rc6.d এ সংরক্ষণ করুন
  2. এটি সম্পাদনযোগ্য করুন: sudo chmod +x K99_script

মন্তব্য:

  • Rc6.d এর স্ক্রিপ্ট অবশ্যই কোনও .sh এক্সটেনশান সহ থাকতে হবে
  • আপনার স্ক্রিপ্টের নামটি অবশ্যই সঠিক সময়ে চালানোর জন্য K99 দিয়ে শুরু করা উচিত।
  • এই ডিরেক্টরিতে স্ক্রিপ্টগুলি বর্ণানুক্রমিক ক্রমে কার্যকর করা হয়।

সূত্র


1
প্রকৃতপক্ষে. এটিকে সঠিকভাবে নামকরণ করা যাতে এটি সঠিক সময়ে চলে very
শিবামস

2
আমি একটি স্ক্রিপ্ট /etc/rc6.d এ রেখেছি এবং এটি শাটডাউন চলেনি। আমি এটিকে /etc/rc0.d এ রেখেছি এবং এটি শাটডাউন চলতে পারে। সম্ভবত, rc.6 শুধুমাত্র রিবুটের জন্য।
এরেল সেগাল-হালেভি

2
@ ইরেল সেগাল-হালেভি আমি কেবল /etc/rc6.d এ একটি কে 99 স্ক্রিপ্ট যুক্ত করার চেষ্টা করেছি এবং এটি কার্যকর হয় নি। অন্যান্য স্ক্রিপ্টগুলি দেখে, ** গা bold় K10reboot -> ../init.d/reboot ** কোডটি একটি লাইন রয়েছে, সুতরাং দেখে মনে হচ্ছে কোনও K99 স্ক্রিপ্ট কখনও কার্যকর হবে না !!
ডেভিড ওয়াকার

নীচে রবির উত্তর আরও ভাল পছন্দ কারণ এটি শাটডাউন এবং পুনরায় বুট উভয়ই স্ক্রিপ্ট চালানোর জন্য সিমলিংক ব্যবহার করে। আমি আরও মনে করি যে বেশিরভাগ সিস্টেম ফাইলগুলি টিআইএস পদ্ধতির দিকে ঝোঁক।
এডি

অন্যদের উল্লিখিত হিসাবে rc.6 কেবল পুনরায় বুট করার জন্য বলে মনে হচ্ছে। দেখুন
আলেিয়ান

12

সিস্টেমড দিয়ে এটি কীভাবে করবেন (এটি আরও সহজ)

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

সিস্টেমডের সাহায্যে আপনি নীচের টেমপ্লেটগুলি ব্যবহার করে আপনার স্ক্রিপ্টগুলিতে কল করতে এক বা দুটি ফাইল তৈরি করেন এবং কয়েকটি কমান্ড কার্যকর করেন। সহজ।


জিইউআই সংস্করণ

প্রথমে আপনি যে স্ক্রিপ্টগুলি প্রারম্ভকালে এবং / অথবা শাটডাউনে চালাতে চান তা তৈরি করুন। আপনার উভয়ের প্রয়োজন না হলে কেবল একটি করুন। আমি .scopening_atstart এবং .scfullcopy_atend তৈরি করেছি।

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

এখানে চিত্র বর্ণনা লিখুন

আমি যে দুটি ফাইল তৈরি করেছি তা একটি র‌্যামডিস্কের বিষয়বস্তু পপুলেশন এবং সংরক্ষণ করে। তারা পরিষেবাটি কাজ করছে তা প্রমাণ করার জন্য আমার হোম ডিরেক্টরিতে একটি ফাইলও তৈরি করে। তারা ফর্ম ছিল:

#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time

তারপরে আমি আমার ফাইল ম্যানেজারটিকে রুট হিসাবে খুললাম /etc/systemd/systemএবং একটি ফাইল স্টার্টআপ.সার্ভিস এবং একটি ফাইল সেভ-রমডিস্ক.সার্ভিস খুললাম এবং তৈরি করেছি। স্পষ্টতই আপনি নিজের নাম এবং জেনেরিক নাম চয়ন করতে পারেন johns_start.service নামে একটি স্টার্টআপ ফাইল এবং johns_shutdown.service নামে একটি শাটডাউন ফাইল অন্তর্ভুক্ত থাকতে পারে। কেবল বিদ্যমান পরিষেবার নাম বাছাই করবেন না।

[Unit]
Description=Startup Applications

[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart

[Install]
WantedBy=multi-user.target

এবং

[Unit]
Description=Save Ramdisk to Wine drive C

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend

[Install]
WantedBy=multi-user.target

আমার জন্য আপনার এক্সিকিউটেবল স্ক্রিপ্টের পুরো পথটি প্রতিস্থাপন করে আপনি একই পরিষেবা ফাইলগুলি ব্যবহার করতে পারেন।

অবশেষে প্রত্যেকের জন্য কমান্ড প্রয়োগ করুন systemctl আপনার_ফায়াল_নাম সক্ষম করুন (তবে প্রত্যয় পরিষেবাটি ছাড়াই)। আমার প্রথম ছিলsystemctl enable startup

পরিষেবাগুলি শুরু করার জন্য কম্পিউটারটি পুনরায় বুট করুন। মাল্টি-ইউজার টার্গেটটি যখন প্রস্থানিত হবে তখন সিস্টেমডিটি মাল্টি-ব্যবহারকারীর টার্গেটে প্রবেশ করবে এবং স্টপ পরিষেবাটি কার্যকর করা হবে। বিভিন্ন অ্যাক্টিভেশন শর্ত সহ বিকল্প পরিষেবা ফাইলগুলি নীচে বর্ণিত হবে।

অতিরিক্ত দরকারী কমান্ডগুলির মধ্যে রয়েছে:

systemctl- সক্ষম স্টার্টআপ
systemctl- সক্রিয় স্টার্টআপ
systemctl পুনরায় আরম্ভ করুন

উপরের রেফারেন্সে আরও কিছু পাওয়া যাবে।



সি এল এল (কমান্ড লাইন) সংস্করণ

এই বিবরণটি ধরে নেওয়া হয় যে আপনি / হোম / জনের পরিবর্তে আপনার হোম ডিরেক্টরি থেকে পরিচালনা করেন, প্রয়োজন অনুযায়ী sudo ব্যবহার করুন এবং আপনার সম্পাদকের পছন্দ যেখানে আমি vim বা svim লিখি।

প্রথম লাইনের সাহায্যে স্টার্টআপ এবং শাটডাউন শেল স্ক্রিপ্টগুলি তৈরি করুন এবং #!/bin/shএগুলি ব্যবহার করে কার্যকর করুন chmod +x my_new_filename

উপরের মতো দুটি ফাইল তৈরি করুন , বা এই উদাহরণস্বরূপ, স্টার্টআপ এবং শাটডাউন কার্যগুলি পরিচালনা করতে একটি ফাইল। আমি আমার হোম ডিরেক্টরিতে স্ক্রিপ্টগুলি সম্পাদন করব তবে @ ডন_ক্রিসটি স্ট্যাক এক্সচেঞ্জের কিছু বিকল্প দেখায় ।

svim /etc/systemd/system/start_and_stop.service

এবং ফাইলের সামগ্রীটিতে অনুলিপি করুন:

[Unit]
Description=Run Scripts at Start and Stop

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands  #your paths and filenames
ExecStop=/home/john/.shutdown_commands

[Install]
WantedBy=multi-user.target

তারপরে পরিষেবাটি কমান্ড সহ সক্ষম করুন :

systemctl enable start_and_stop

এবং আপনার সিস্টেমটি পুনরায় বুট করুন যার পরে পরিষেবাগুলি সক্রিয় থাকবে। আদেশগুলি systemctl is-enabled start_and_stopএবং systemctl is-active start_and_stopআপনার নতুন পরিষেবাদি পর্যবেক্ষণে ব্যবহার করা যেতে পারে।



শাটডাউন করার জন্য ট্রিগার শর্তগুলি পরিবর্তন করা

সর্বোপরি ফাইলগুলি স্ক্রিপ্টগুলি চালনার জন্য একাধিক-ব্যবহারকারী পরিবেশের উন্মুক্ত বা ঘনিষ্ঠ ব্যবহার করে। নীচের ফাইলটি এর স্ক্রিপ্টগুলি শুরু করতে চারটি সম্ভাব্য শাটডাউন প্রক্রিয়া শুরু করে। পূর্ববর্তী লাইনে + ওয়ান্টডবাই লাইনটিতে লক্ষ্যগুলি যুক্ত করা বা অপসারণ আপনাকে সূক্ষ্ম পার্থক্য করতে দেয়:

এই পোস্টটির দ্বিতীয় উত্তরে এই ফাইলটি প্রস্তাব করা হয়েছিল তবে আমি ইনস্টল বিভাগটি যুক্ত না করা পর্যন্ত আমি এটি চালাতে পারিনি।

আবার, স্ক্রিপ্টটি সম্পাদনা করুন /etc/systemd/service/এবং এটি ব্যবহার করে সক্ষম করুন systemctl enable your_file_name। আমি যখন লক্ষ্যগুলি পরিবর্তন করেছি তখন আমি systemclt disable file_nameকমান্ডটি ব্যবহার করেছি এবং তারপরে এটি সক্ষম করে যা এটি লক্ষ্য ডিরেক্টরিতে সংযুক্ত করে। রিবুট করুন এবং পরিষেবাটি পরিচালিত হবে।

[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
#   executed before the target state is entered
# Also consider kexec.target

[Service]
Type=oneshot
ExecStart=/home/john/.my_script  #your path and filename

[Install]
WantedBy=halt.target reboot.target shutdown.target

7
সহজ? কিসের চেয়ে সহজ? এভারেস্ট আরোহণের চেয়ে সহজ? এখানে পোস্ট করা প্রতিটি সমাধানই এর চেয়ে সহজ ...
ফ্রান মারজোয়া

1
বাহ, এটি একটি সম্পূর্ণ এবং শালীনভাবে লিখিত উত্তর, এবং প্রত্যেকের কী করা উচিত - /etc/rc6.d এর নামকরণ সমস্যা এবং বিভ্রান্তি ইঙ্গিত দেয় যে সেগুলি ভাল উত্তর নয়। যদি কোনও পদ্ধতি সহজ হয়, তবে অগত্যা এটির নিরাপদে এর পরিণতি অর্জনের ক্ষমতা নেই। [ইনস্টল] বিভাগটি দেখুন - আপনি নিশ্চিত হতে পারেন যে আপনার স্ক্রিপ্ট সঠিক সময়ে কার্যকর হবে। তদ্ব্যতীত, কারণ একটি উত্তর দীর্ঘ, এর অর্থ এটি জটিল নয়! ধন্যবাদ বিটিডব্লিউ, জন 636363১, এই উত্তরটি নিখুঁত এবং একটি মিশন সমালোচনামূলক পর্যায়ে নিরাপদ এবং দক্ষ স্ক্রিপ্ট তৈরিতে অমূল্য হবে ...
মিলার গরিলা

11
  1. /Etc/init.d/ ডিরেক্টরিতে আপনার স্ক্রিপ্টের সাথে একটি শেল এক্সিকিউটেবল ফাইল তৈরি করুন।

  2. যেহেতু এটি শাটডাউন করার সময় কার্যকর করাতে হবে বা পুনরায় বুট করার জন্য /etc/rc0.d/ এবং /etc/rc6.d এ সফটলিঙ্ক তৈরি করতে হবে reb

উদাহরণ:

sudo ln -s /etc/init.d/<your_file> /etc/rc0.d/k99stop_vm
sudo ln -s /etc/init.d/<your_file> /etc/rc6.d/k99stop_vm
sudo chmod a+x /etc/init.d/<your_file>

chmodলিঙ্ক টার্গেটের অনুমতি ফ্ল্যাগগুলি পরিবর্তন করে, যা উভয় যুক্তির জন্য একই। তাদের উভয় নির্দিষ্ট করা অপ্রয়োজনীয়।
ডেভিড ফোস্টার

2

আপনি এখানে একটি সমাধান খুঁজে পেতে পারেন: সিস্টেম শাটডাউন / স্টার্টআপের সমস্ত ভ্যাগ্রেন্ট বাক্স স্থগিত / পুনরায় চালু করুন

একটি সরল সূচনা স্ক্রিপ্ট রয়েছে যা বন্ধ হওয়ার আগে সমস্ত চলমান বাক্স স্থগিত করে।

স্থাপন

/etc/init.d/vagrant-boxesউপরের নিবন্ধ থেকে স্ক্রিপ্টটি সম্পাদনা করুন এবং আটকান এবং সংরক্ষণ করুন। বা এখান থেকে ডাউনলোড করুন এবং এটিকে সংরক্ষণ করুন /etc/init.d/vagrant-boxes। ডিবিয়ান / উবুন্টু ইত্যাদিতে চালান

# update-rc.d vagrant-boxes defaults 99 01

99 নম্বরটি ক্রম সংখ্যা এবং এটির চেয়ে বড় হওয়া উচিত (আমার ক্ষেত্রে ভার্চুয়ালবক্স নম্বর 20, যা ডেবিয়ান ডিস্ট্রোজে ডিফল্ট)। দ্বিতীয় নম্বরটি কম্পিউটার বন্ধ করার সময় ক্রম। সুতরাং, এটি সবার আগে করা ভাল হতে পারে।


2

উবুন্টু 14.10 এর জন্য আপনার মতো কিছু RC04নয়RC99

স্ক্র্যাচ থেকে কী করবেন

  1. এখানে একটি স্ক্রিপ্ট তৈরি করুন /etc/init.d/scriptName
  2. মাধ্যমে লিঙ্ক ln -s /etc/rc6.d/K04scriptName /etc/init.d/scriptName

পদক্ষেপগুলি আমি পেরিয়েছি

  1. আমি উবুন্টু ব্যবহার করার ব্যর্থ চেষ্টা করেছি - স্টার্টআপ এবং শাটডাউন সময়ে একটি স্ক্রিপ্ট কার্যকর করছি
  2. আমি rc0.d (rc6.d, rc.d) সহ উবুন্টু 14.10 শাটডাউন স্ক্রিপ্ট পেয়েছি
  3. আমি /etc/rc6.d/RC99linkName থেকে /etc/rc6.d/RC04linkName এ পরিবর্তন করেছি এবং এটি কাজ করে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.