মাথা বিহীন চলাকালীন আরপিআই কীভাবে বন্ধ করবেন


33

যদি আমি একটি পাই হেডলেস চালাচ্ছি, তবে নিরাপদে বন্ধ করার জন্য আমি কি কোনও আদেশ ব্যবহার করতে পারি, বা আমার কেবল বিদ্যুতের কর্ডটি সরানো উচিত?


পাওয়ার
অফ

poweroffসম্ভবত এটি একটি প্রতীকী লিঙ্ক halt...! 8-)
স্লাইসভেন

উত্তর:


40

আপনি নিরাপদে পি ব্যবহার করে শাটডাউন করতে পারেন

shutdown -h now

-H কেবল সমস্ত প্রক্রিয়া বন্ধ করে দেয়


7
-R পুনরায় চালু করতে (শাটডাউন + রিবুট) একই সময়ে শেখার যোগ্য হতে পারে।
এক্সটিএল

6
ভুলবেন না আপনি শাটডাউন বা sudo ব্যবহার করতে হবে।
কেইকি

1
বিকল্পভাবেsudo poweroff
berto

3
-hনা থামিয়ে - সম্পূর্ণ সিস্টেম ছাড়া বিকল্প shutdownনেবে initঅর্থাত, একক ব্যবহারকারী মোড, একটি সুপার-ইউজার লগইন (রুট পাসওয়ার্ড প্রয়োজন) জন্য অপেক্ষা - রান স্তর 1। রুট হিসাবে লগ ইন করার পরে লগ আউট initকরার পরে আরপিআইকে মাল্টি-ইউজার মোডে আনার জন্য প্রয়োজনীয় জিনিসগুলি পুনরায় করা হবে - যেমন এটি মূল বুট-আপ চলাকালীন হবে (সমস্ত স্টাফ সম্পূর্ণ করার পরে, fsckইত্যাদি, /etc/rc.localএটি চলমান যে তারপর)। এই প্রসঙ্গে "শাটডাউন" হ'ল "সাধারণ ব্যবহারকারীদের জন্য সিস্টেমটি অফ লাইন নিন" ...
স্লাইসভেন

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

40

কেবল কর্ডটি প্লাগ করবেন না, কারণ এটি মাঝেমধ্যে (সম্ভবত, প্রায়শই) ফাইল সিস্টেমের দুর্নীতির কারণ হতে পারে।

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

একটি ভাল, সম্ভবত হালকা পুরানো তবে ভাল লেখা, উদেব নিয়মের পরিচয় | এখানে | । প্রাথমিক ধারণাটি হ'ল lsusbউদাহরণস্বরূপ: আপনি ডিভাইস সম্পর্কে কিছু তথ্য পান

Bus 002 Device 003: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN

তৃতীয় ক্ষেত্রের লেবেল আইডি হ'ল বিক্রেতা এবং মডেল আইডি কোনও কোলন দ্বারা পৃথক। ধরে নেওয়া যায় যে আপনার একাধিক অভিন্ন ডিভাইস প্লাগ ইন নেই, এই সংমিশ্রণটি অনন্য হওয়া উচিত।

আপনি এর মাধ্যমে আরও বিশদ প্রাসঙ্গিক তথ্য পেতে পারেন udevadm monitor --udev --property, যা আপনি এটি হত্যা না করা পর্যন্ত স্ট্যান্ডার্ড আউট প্রতিবেদন করবেন eg যখন আমি উপরে থেকে টিনে ওয়েইনি ওয়াইফাই ডাঙ্গলটি আনপ্লাগ করি তখন এটি থুতু ছিটকে যায়:

UDEV  [2834.504860] remove   /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6 (usb)
ACTION=remove
[...]
ID_BUS=usb
ID_MODEL=802.11n_WLAN_Adapter
ID_MODEL_ENC=802.11n\x20WLAN\x20Adapter
ID_MODEL_ID=8176
[...]
ID_VENDOR=Realtek
ID_VENDOR_ENC=Realtek
ID_VENDOR_ID=0bda

ID_MODEL এবং ID_VENDOR ক্ষেত্রগুলি লক্ষ্য করুন। আপনার উদেব নিয়মে আপনি এটি ব্যবহার করতে চান। অনলাইনে কিছু পুরানো বা ভুল উত্স রয়েছে যা এটিটিআর ক্ষেত্রগুলি ব্যবহার করার পরামর্শ দেয় তবে এগুলি একটি "অপসারণ" ইভেন্ট সম্পর্কিত ENV ক্ষেত্র।

একটি ফাইল তৈরি করুন /etc/udev/rules.d। বিতরণ নির্বিশেষে এটি একই। ফাইলটি অবশ্যই শেষ হতে .rulesহবে এবং এই ডিরেক্টরিতে থাকা সমস্ত ফাইল লিক্সোগ্রাফিকভাবে প্রক্রিয়া করা হবে। আমার বিশ্বাস, পূর্বে ঘোষিত নিয়মগুলি প্রাধান্য পায়, সুতরাং এটি ব্যবহার করে 00-my_pi.rulesএটি লাইনের সামনের দিকে থাকবে (বর্ণগুলির আগে সংখ্যা সাজান)। এটিতে একটি লাইন যুক্ত করুন:

ACTION=="remove", ENV{ID_VENDOR_ID}=="0bda", ENV{ID_MODEL_ID}=="8176", RUN+="/sbin/shutdown -h now"

সাবধান ==এবং না =। আপনি যদি পরে ব্যবহার করেন তবে মানদণ্ডটি অর্থহীন। যে কোনও পরিস্থিতিতে আপনি কোনও udev নিয়ম শেষ করতে পারেন যা কোনও ইভেন্টের সাথে মেলে!

এটি দিয়ে বোঝা হয়েছে তা নিশ্চিত করুন udevadm control --reload-rules। এখন আপনি যখন ওয়াইফাই ডংগল আউট করবেন, পাইটি পরিষ্কারভাবে বন্ধ করে দেওয়া উচিত ... এটি করার জন্য এক মিনিট সময় দিন এবং আপনি শক্তিটি আনপ্লাগ করতে পারেন (প্রথমবার সংযুক্ত স্ক্রিনের সাহায্যে এটি চেষ্টা করুন)। আপনি এটি পুনরায় বুট করতেও ব্যবহার করতে পারেন - man shutdownএখানে বর্ণিত সমস্ত কমান্ডের ম্যান পৃষ্ঠাটি দেখুন এবং;


3
আমি মনে করি না যে ওপি এটিই চেয়েছিল। তথ্যের জন্য তবে +1 করুন।
ভিনসেন্ট পি

ঝরঝরে! অবশ্যই আপনি একটি স্বেচ্ছাসেবী ইউএসবি ডিভাইসটি অপসারণ (বা প্লাগ ইন) করতে সক্ষম হবেন এটি এটিকে ট্রিগার করে
টোবিয়াস কেইনজলার

এটি একটি দুর্দান্ত শুরু। জিপিআইও বোতাম (এসিপিআই বা এইচআইডি ইভেন্টে এরকম কিছু পাওয়ার কোনও উপায়?) বা কোনও কিছু আরও কার্যকর হতে পারে বলে শাটডাউনটি পাওয়া।
এক্সটিএল

@ এক্সটিএল: চারপাশে এপসি ডেমন রয়েছে, সুতরাং এটি সম্ভব (কার্নেলের প্রতিবেদনের মাধ্যমে রিপোর্ট করা হবে)। পাইতে জিপিওর ক্ষেত্রে এটি কমপক্ষে সম্ভাব্য সত্য। HID ঘটনা আরো প্রাসঙ্গিক (ক উদাহরণ প্রসঙ্গে একটি GUI ডেক্সটপ পরিবেশকে হচ্ছে) এবং সত্য যে আপনি "স্থগিত" (== টাইপ করতে পারেন হয় shutdown -h nowলিনাক্স) হয়তো এই ধরনের প্রয়োজনীয়তার হ্রাস;)
স্বর্ণকেশ

এটি নিখুঁত, ডঙ্গলটি কেবলমাত্র আমাদের পাইতে প্লাগ ইন করা হয় এবং আমরা প্রায়শই সংযোগটি হারাতে পারি তাই আমাদের বিদ্যুতের ক্ষতি থেকে দূরে না ফেলে এটিকে চারপাশে নিয়ে যাওয়া দরকার।
noio

8

আপনি শাটডাউন করতে নিম্নলিখিত কমান্ডটি জারি করতে পারেন:

sudo init 0

এবং পুনরায় বুট করতে:

sudo init 6

এটি অপারেটিং সিস্টেমটি এখনও ব্যবহার করে এমন একটি ধারণা হিসাবে রান স্তরের উপর নির্ভরশীল। সিস্টেমে স্থানান্তরিত করা আজকাল এটিকে কম ব্যবহারযোগ্য করে তোলে।
স্টিফেন মাইকেল কেল্লাত

আজ থেকে সম্পাদনা বাদ দিলে আপনি লক্ষ্য করেছেন এটি বেশ পুরানো উত্তর। প্রশ্নটিও দুই বছরের বেশি পুরনো।
ব্যবহারকারী

1
এই ব্যবহারে এটি sudo telinit ## যেখানে 0 থেকে 6 এর মধ্যে একটি সংখ্যা হয় এটি ব্যবহার করা আরও ভাল বলে মনে করা হয় - টেলিনিটটি হল আরম্ভের প্রতীকী লিঙ্ক যা এটি সনাক্ত করে যে এটির প্রাথমিক নাম "init" দ্বারা ডাকা হচ্ছে না (এবং এটির পিআইডি নেই) 1!) সুতরাং এটি আসল "init" প্রক্রিয়াটির জন্য একটি পাইপ তৈরি করে এবং এটি বর্তমান রানলেভেলকে সংখ্যার যুক্তি হিসাবে বর্ণিত নতুন মানকে পরিবর্তন করতে বলে । telinit"বলুন নতুন রানলেভেল বলুন" এর সংকোচন।
স্লাইসভেন

7

আমার পছন্দসই পদ্ধতিটি হ'ল ব্যবহার করা sudo poweroffযা একটি শাটডাউন কমান্ডের একটি উপনাম যা বিদ্যুতের ব্যবহারকেও হত্যা করে।


7

যদিও প্রশ্নের ইতিমধ্যে যথেষ্ট উত্তর দেওয়া হয়েছে; আমার পছন্দটি ইতিমধ্যে উত্তর দেওয়া থেকে আলাদা।

অন্যরা যেমন বলেছে কেবল শক্তি টানতে এড়িয়ে চলুন। আমার পছন্দসই কমান্ডগুলি (হয় রুট হিসাবে বা এর মাধ্যমে পূর্ববর্তিত sudo):

থামার জন্য: halt(হুইজি এবং পূর্ববর্তী এই কমান্ডটিও সিস্টেমটিকে বন্ধ করার ক্ষমতা দেয়; জেসির পক্ষে এটি আসলে পাওয়ারফফ করে না যদিও এটি শেষ হয়ে গেলে প্লাগটি টানাই নিরাপদ) halt -p; shutdown now -hবা poweroffজেসির জন্য কেবল প্রয়োজন ...

পুনরায় বুট করতে: reboot

আমি এই আদেশগুলি পছন্দ করি কারণ এগুলি সরাসরি এগিয়ে, স্মরণে রাখা সহজ এবং স্বতঃসিদ্ধ ...


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

আপনার ব্যবহার করার অভ্যাসটি পাওয়া উচিত নয় haltবা poweroffযেমন এগুলি কেবল shutdown -h nowজিএনইউ সরঞ্জামগুলির সাথে সম্পর্কিত হয় তবে অন্যান্য সিস্টেমে আপনি তত্ক্ষণাত আপনার সিস্টেমটি বন্ধ করে দেবেন, আপনার সমস্ত প্রোগ্রাম মেরে ফেলবে এবং সম্ভবত আপনার ফাইল সিস্টেমটি দূষিত করবে। এটি বলেছে, আপনি এটি বেশিরভাগ লিনাক্স বিতরণ সহ একটি রাস্পবেরি পাইতে ব্যবহার করতে পারেন, তবে যদি আপনি পাইটি শেখার জন্য ব্যবহার করেন তবে আপনি এটি "সঠিক উপায়ে" করতে চাইতে পারেন।
Allo

@ অ্যালো - লিগ্যাসি লিনাক্স ওএস এবং অন্যান্য নন-লিনাক্স ইউনিক্সের মতো ওএসের (যেমন বিএসডি) ভেরিয়েন্টগুলির জন্য আপনি ভাল হতে পারেন। তবে সাম্প্রতিক আরও লিনাক্স ওএসে যা সিস্টেমডি ব্যবহার করে (যেমন বেশিরভাগ লিনাক্স এই দিনগুলিতে) তা নয়। halt, poweroff, rebootএবং shutdownসব symlinks হয় systemctl(মূল কমান্ড এছাড়াও পাস সহ)। এরপরে উপযুক্ত সিস্টেমডি টার্গেট ট্রিগার করে: উদাঃ poweroff.target। FWIW poweroff.targetসিস্টেমটি পরিষ্কারভাবে বন্ধ করার জন্য একটি এসিপিআই কল কল করে। সুতরাং এই দিন এবং যুগে আফাইক poweroff(বা systemctl poweroff) "সঠিক পথ" way :)
জেরেমি ডেভিস

লিনাক্স সহ অনেক ক্ষেত্রে, এটি করার একাধিক উপায় রয়েছে। তবে আপনি বিবেচনা করা উচিত যদি আপনি এটি সেভাবে শিখতে না চান, যা স্ট্যান্ডার্ডে বর্ণিত হয়েছে, যা অন্যান্য ইউনিক্স সিস্টেমগুলি অনুসরণ করে। লিনাক্স ব্যবহারকারী হিসাবে আপনার পক্ষে খুব কম সুবিধা রয়েছে তবে ভবিষ্যতে আপনি কখন অন্য কোনও সিস্টেম চেষ্টা করবেন কে জানে? থামার উপর নির্ভর করবেন না এবং একটি --no-preserve-rootপতাকা পেতে rm এর উপর নির্ভর করবেন না । / বিন / শ হচ্ছে / বিন / বাশের উপর নির্ভর করবেন না (এটি ডেবিয়ান ভিত্তিক সিস্টেমগুলির জন্য এমনকি সত্য নয়)। "ডান" উপায়টি ব্যবহার করার চেষ্টা করা প্রায়শই দরকারী, যদিও এটি বর্তমানে অন্য কোনওভাবে কাজ করে would
Allo

1
@ অ্যালো - ফেয়ার পয়েন্টস এবং আমি মনে করি যে বিভিন্ন সিস্টেম সম্পর্কে আপনার জ্ঞান ভাগ করে নেওয়া আপনার পক্ষে সত্যই দুর্দান্ত এবং আমি সম্মত হই যে এটি অবশ্যই সিস্টেম এবং প্রাসঙ্গিক সীমাবদ্ধতার মধ্যে পার্থক্য লক্ষ করার মতো। যদিও আপনার এই পরামর্শটি থেকে আমি একমত নই যে আপনার পথটি "সঠিক" উপায়। এটি "পিক্সিক্স কমপ্লায়েন্ট" উপায় হতে পারে তবে এটি একটি উপায়ে "সঠিক" এবং অন্যটি "ভুল" করে না। উদাহরণস্বরূপ ব্যাশ (এবং বাশিমিজ) ব্যবহার করা সম্পূর্ণ বৈধ আইএমও, যদিও আমি সম্মত হই যে আপনার যদি বাশ প্রয়োজন / চান তবে আপনার স্পষ্টভাবে ব্যবহার করা উচিত /bin/bash। এফওয়াইআই আমার দৃষ্টিভঙ্গি খুব দেবিয়ানকেন্দ্রিক ...
জেরেমি ডেভিস

4

কেবল এটি ফেলে দিতে, আপনি যদি কিছুটা হার্ডওয়্যার যুক্ত করতে চান তবে আপনি জিপিআইও পিনগুলি পোল করতে এবং একটি নির্দিষ্ট পিন, পুনরায় বুট করার (বা শাটডাউন) পাইয়ের জন্য একটি ছোট ডিমন লিখতে পারেন।

এছাড়াও, এখানে উল্লিখিত সমস্ত কমান্ডগুলি এসএসএইচ দিয়ে চালানো যেতে পারে।


3

আমি জানি এটি মূল প্রশ্নের 3 বছর পরে। তবে আমি কেবল আমার রাস্পবেরি পাই পেয়েছি এবং যদি আমি এটি কোনও মনিটরের স্ক্রিনে সংযোগ করতে ভুলে যাই এবং এটির কোনও নেটওয়ার্ক সংযোগ না থাকে তবে আমার এটি বন্ধ করতে সমস্যা হচ্ছে having

আমি "পাই_আউটো_শুটডাউন" নামের একটি থাম্বড্রাইভ প্লাগ ইন করে 60 সেকেন্ডের মধ্যে এটি স্বয়ংক্রিয়ভাবে বন্ধ করার জন্য একটি ছোট পাইথন স্ক্রিপ্ট লিখেছি।

এই স্ক্রিপ্টটি কেবল rc.local থেকে কল করুন।

আশা করি এটা কাজে লাগবে.

shutdown_loop_delay = 60
shutdown_flag_file = 'pi_auto_shutdown'

def poll_shutdown_flag():
    """check whether a shutdown flag file in a usb drive exists"""

    ## run mount command
    ## sample mount output: "/dev/sda1 on /media/path/"
    output, error = subprocess.Popen('mount', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
    if len(error) > 0:
        log('mount error: {}'.format(error))
        return False

    ## parse mount output
    for output_line in output.split('\n'):
        output_words = output_line.split(' ')

        if len(output_words) < 3:
            continue

        if output_words[0].startswith('/dev/sd'):
            flag_file_path = os.path.join(output_words[2], shutdown_flag_file)
            if os.path.isfile(flag_file_path):
                return True

    return False

def shutdown():
    """shutdown the system immediately"""
    subprocess.Popen('sudo shutdown -h now', shell=True).communicate()

def loop_shutdown():
    while True:
        time.sleep(shutdown_loop_delay)
        if poll_shutdown_flag():
            shutdown()

loop_shutdown()

আকর্ষণীয় পদ্ধতির।
এরিক উইলসন

1

আমি SSH কমান্ড ব্যবহার করে আমার RPi বাক্সে

sh এসএসপি আরপিআই সুডো পাওয়ার অফ

আরপিআই হ'ল আমার আরপিআই বাক্সের আইপি ঠিকানার নাম এবং এটি ~ / .ssh / config ফাইলে সংজ্ঞায়িত করা হয়েছে ।

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