শাটডাউন করার আগে একটি কমান্ড কার্যকর করুন


52

কম্পিউটার বন্ধ হওয়ার ঠিক আগে (সময় নির্ধারণ করা আবশ্যক নয়) আমি একটি সাধারণ কমান্ড কার্যকর করতে চাই।

শুরু করার জন্য, আমি /etc/rc.local ব্যবহার করতে পারি; শাটডাউন এর জন্য কি একই রকম কিছু আছে?

মনে রাখবেন যে আমি এখনও মেনু থেকে সংহত শটডাউন বোতামটি ব্যবহার করতে চাই; যেমন আমি প্রতিবার টার্মিনালের মাধ্যমে শাটডাউন করে কোনও কাস্টম স্ক্রিপ্ট ব্যবহার করতে চাই না - এটি স্বয়ংক্রিয় হওয়া দরকার।

উত্তর:


42

লিনাক্স মিন্ট উবুন্টু ভিত্তিক, সুতরাং আমি অনুমান করছি রানলেভেল সিস্টেমটি সম্ভবত একই রকম is উবুন্টুতে, /etc/rc[0-6].dডিরেক্টরিতে উপস্থিতি অনুসারে বিভিন্ন রানলেভেলের স্ক্রিপ্টগুলি কার্যকর করা হয় । রানলেভেল 0 শাটডাউন এবং 6 টি পুনরায় বুট করার সাথে সম্পর্কিত।

সাধারণত স্ক্রিপ্টটি নিজেই সংরক্ষণ করা হয় /etc/init.dএবং তারপরে আপনার প্রয়োজনীয় রানলেভের সাথে সম্পর্কিত ডিরেক্টরিগুলিতে সিমলিংক স্থাপন করা হয়।

সুতরাং আপনার ক্ষেত্রে, আপনার স্ক্রিপ্টটি লিখুন, এটি স্টোর করুন /etc/init.d/, তারপরে প্রতিটিটিতে একটি সিমিলিংক তৈরি করুন /etc/rc0.dএবং /etc/rc6.d(যদি আপনি উভয়ই চান) আপনার স্ক্রিপ্টের দিকে নির্দেশ করে।

প্রতিটি রানলেভাল ডিরেক্টরিতে থাকা স্ক্রিপ্টগুলি অ্যাসিবেটিকাল ক্রমে কার্যকর করা হবে , সুতরাং যদি রানলেভেলের মধ্যে অর্ডারটি আপনার পক্ষে গুরুত্বপূর্ণ হয়ে থাকে তবে সেই অনুযায়ী আপনার সিমলিংকের নামটি চয়ন করুন।


আমি স্রেফ init.d (কুবুন্টু নির্ভুল) কঙ্কালের ফাইলটি দেখেছিলাম এবং কিছুটা ভয় পেয়েছি। আমি কেবল কয়েকটি কমান্ড যুক্ত করতে চাই যা / var / লগের অধীনে কোনও ফাইলের মধ্যে শাটডাউনয়ের তারিখ প্রতিধ্বনিত করে। আমি কি কেবল এটি করতে পারি বা কঙ্কাল ফাইলে থাকা অন্যান্য কিছু জিনিস নিয়ে আমার কি ডিল করতে হবে?
জো

2
@ জো - আপনি যদি না চান যে আপনার স্ক্রিপ্টটি কোনও মানক পরিষেবা হিসাবে নিয়ন্ত্রণযোগ্য হয়। আপনি নিজের লগ ফাইলে সাধারণ প্রতিধ্বনি দিয়ে কোনও কিছু ভাঙ্গবেন না, তাই এটি চেষ্টা করে দেখুন।
ire_and_curses

1
এখানে একটি সাধারণ নমুনা init.d স্ক্রিপ্ট is এছাড়াও, সিমলিঙ্কগুলি ব্যবহার করে করা সহজ এবং আরও sudo update-rc.d /etc/init.d/myservice defaults
দৃ rob়

আমি /etc/init.d/spark_shutdown.sh লিখিত এবং /etc/rc0.d এর লিঙ্ক তৈরি করেছেন & এখন /etc/rc6.d আমি কিভাবে নিশ্চিত না এই স্ক্রিপ্টের উবুন্টু আওস EC2 ইনস্ট্যান্সের মধ্যে দৌড়ে আছে
আশিস Karpe

10

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

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


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

প্রথমে আপনি যে স্ক্রিপ্টগুলি প্রারম্ভকালে এবং / অথবা শাটডাউনে চালাতে চান তা তৈরি করুন। আমি .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

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


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

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

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

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

vim /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

আপনি ব্যবহার করতে হবে rc.shutdownলিনাক্স কার্নেল জন্য শাটডাউন স্ক্রিপ্ট। ওপেনবিএসডি ম্যান পৃষ্ঠাটি উদ্ধৃত :

রিবুট (8) বা থামানো (8) কমান্ড ব্যবহার করে যখন সিস্টেমটি বন্ধ হয়ে যায়, বা যখন init (8) এটি করার জন্য সংকেত দেওয়া হয়, বা কীবোর্ড-অনুরোধ করা হল্ট জারি করা হয় (যদি স্থাপত্য এটি সমর্থন করে), আরসি ( 8) `` শাটডাউন '' যুক্তি দিয়ে আহ্বান জানানো হয়েছে।

সুতরাং, আপনি কেবল আপনার আরসি.শুটডাউনটি খুলুন এবং এটিতে যে কোনও শেল কমান্ড কার্যকর করতে চান তা যুক্ত করুন।

আপডেট: লিনাক্স মিন্ট যেহেতু উবুন্টুর উপর ভিত্তি করে, যার আলাদা স্টার্টআপ / শাটডাউন পদ্ধতি রয়েছে, তাই আপনার সম্পর্কিত প্রক্রিয়াটি এখানে:

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


1

ডেবিয়ান হুইজি, ডেভুয়ান এবং এর উদ্ভব এবং অন্যদের মধ্যে ব্যবহৃত এসআইএসভি নির্ভরতা ভিত্তিক ডিআইডি সিস্টেমগুলির জন্য, আপনি নিম্নলিখিতগুলি পছন্দ করতে rc.shutdownঅ্যানালগের আচরণ নকল করতে পারেন rc.local:

নিম্নলিখিত কঙ্কালের সাথে আপনার আদেশগুলি যুক্ত করুন /etc/rc.shutdown:

#!/bin/sh -e
#
# rc.shutdown
#

# <add your commands here, before exit 0>

exit 0

স্ক্রিপ্ট সংরক্ষণ করুন এবং ফাইলটি এক্সিকিউটেবল করতে chmod a+x /etc/rc.shutdown

তারপরে, /etc/init.d/rc.shutdownনিম্নলিখিত বিষয়বস্তু সহ আপনার সিস্টেমে একটি নতুন স্ক্রিপ্ট যুক্ত করুন :

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rc.shutdown
# Required-Start:
# Required-Stop:
# X-Stop-After:      umountroot
# Default-Start:
# Default-Stop:      0 6
# Short-Description: Run /etc/rc.shutdown if it exist
### END INIT INFO


PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_stop() {
    if [ -x /etc/rc.shutdown ]; then
            [ "$VERBOSE" != no ] && log_begin_msg "Running local shutdown scripts (/etc/rc.shutdown)"
        /etc/rc.shutdown
        ES=$?
        [ "$VERBOSE" != no ] && log_end_msg $ES
        return $ES
    fi
}

case "$1" in
    start)
        # No-op
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop|status)
    do_stop
        exit 0
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

এই স্ক্রিপ্টটি কার্যকর কার্যকরও করুন।

/Etc/rclays06 .dd তে সিমলিংকগুলি তৈরি করুন:

cd /etc/rc0.d ; ln -s ../init.d/rc.shutdown K01rc.shutdown

এবং

cd /etc/rc6.d ; ln -s ../init.d/rc.shutdown K01rc.shutdown

ব্যবহার করুন insservsymlinks সংশোধন করার এবং প্রয়োজনীয় .depend.boot, .depend.start এবং .depend.stop ফাইল তৈরি করতে:

insserv -v

উপরে বর্ণিত সমস্ত কমান্ডের জন্য আপনাকে মূল হতে হবে বা sudo ব্যবহার করতে হবে।


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