अगर मैं पाई हेडलेस चला रहा हूं, तो क्या कोई ऐसा कमांड है जिसे मैं सुरक्षित रूप से बंद करने के लिए उपयोग कर सकता हूं, या क्या मुझे बस पावर कॉर्ड को हटा देना चाहिए?
poweroff
शायद एक प्रतीकात्मक कड़ी है halt
...! 8-)
अगर मैं पाई हेडलेस चला रहा हूं, तो क्या कोई ऐसा कमांड है जिसे मैं सुरक्षित रूप से बंद करने के लिए उपयोग कर सकता हूं, या क्या मुझे बस पावर कॉर्ड को हटा देना चाहिए?
poweroff
शायद एक प्रतीकात्मक कड़ी है halt
...! 8-)
जवाबों:
आप सुरक्षित रूप से उपयोग करके पाई को बंद कर सकते हैं
shutdown -h now
-ह बस सभी प्रक्रियाओं को रोक देता है
sudo poweroff
-h
को रोक देता है - उस विकल्प के बिना रन-लेवल 1 पर shutdown
ले जाएगा init
- यानी, एकल उपयोगकर्ता मोड, सुपर-उपयोगकर्ता लॉगिन (रूट पासवर्ड की आवश्यकता) की प्रतीक्षा कर रहा है। रूट के रूप में लॉग इन करने और फिर लॉग आउट init
करने के बाद आरपीआई को मल्टी-यूजर मोड में लाने के लिए आवश्यक सामान को फिर से करना होगा - जैसा कि मूल बूट-अप (सभी सामानों के पूरा होने के बाद, यानी fsck
आदि) के दौरान होता है, /etc/rc.local
ताकि यह चल सके तब करता है)। इस संदर्भ में "शटडाउन" है "सिस्टम ऑफ-लाइन को सामान्य उपयोगकर्ताओं के लिए ले लो" ...
shutdown
वास्तव में इसे निष्पादित करने के लिए कुछ समय लगता है, और किसी भी ssh क्लाइंट को डिस्कनेक्ट करता है, जबकि यह उस पर है। तो आप कैसे जानते हैं कि जब यह सुरक्षित है, उदाहरण के लिए, एसडी कार्ड को हटा दें?
बस कॉर्ड को अनप्लग न करें, क्योंकि यह कभी-कभी (शायद, अक्सर) फाइलसिस्टम भ्रष्टाचार को जन्म दे सकता है।
जैसा कि इम्प्लस कहते हैं, उपयोग करें shutdown
। मैं हाल ही में एक विशिष्ट USB डिवाइस अनप्लग होने पर शटडाउन या रिबूट को ट्रिगर करने के लिए udev को कॉन्फ़िगर करने के बारे में एक टिप भर में चला गया। यह उपयोगी है अगर सिस्टम अप्रतिसादी हो गया है या नेटवर्क कनेक्शन खो गया है और आप इसमें कीबोर्ड की तरह छिपा (मानव इंटरफ़ेस डिवाइस) सामान को परेशान नहीं कर सकते हैं या नहीं कर सकते हैं।
वहाँ एक अच्छा, शायद हल्के से पुराना है, लेकिन अच्छी तरह से लिखा है, udev नियमों का परिचय | यहाँ । मूल विचार यह है कि आपको डिवाइस के बारे में कुछ जानकारी मिलती है lsusb
, उदाहरण के लिए:
Bus 002 Device 003: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN
तीसरे क्षेत्र में लेबल की गई आईडी वेंडर और मॉडल आईडी है जो एक कोलन द्वारा अलग की गई है। यह मानते हुए कि आपके पास कई समान उपकरण प्लग-इन नहीं हैं, यह संयोजन अद्वितीय होना चाहिए।
आप के माध्यम से अधिक विस्तृत प्रासंगिक जानकारी प्राप्त कर सकते हैं udevadm monitor --udev --property
, जो कि जब तक आप इसे नहीं मारते, तब तक मानक को रिपोर्ट करेंगे। जब मैं ऊपर से थूकता है तब तक वेनी वेन डोंगी को अनप्लग करें
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 फ़ील्ड देखें। ये आप अपने udv नियम में उपयोग करना चाहते हैं। ऑनलाइन कुछ पुराने या गलत स्रोत हैं जो एटीटीआर क्षेत्रों का उपयोग करने का सुझाव देते हैं, लेकिन ये "हटाने" वाली घटना के संबंध में ईएनवी क्षेत्र हैं।
में एक फ़ाइल बनाएँ /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"
खबरदार ==
और नहीं =
। यदि आप बाद में उपयोग करते हैं, तो मापदंड अर्थहीन है। किस मामले में आप किसी भी घटना से मेल खाने वाले udv नियम को समाप्त कर सकते हैं!
सुनिश्चित करें कि यह लोड किया गया है udevadm control --reload-rules
। अब जब आप वाईफाई डोंगल को बाहर निकालते हैं, तो पी को सफाई से बंद कर देना चाहिए ... इसे करने के लिए एक मिनट दें और फिर आप पावर को अनप्लग कर सकते हैं (पहली बार संलग्न स्क्रीन के साथ इसे आज़माएं)। आप इसे रिबूट करने के लिए भी इस्तेमाल कर सकते हैं - देखें man shutdown
, और, वास्तव में, यहां बताए गए सभी आदेशों के लिए मैन पेज;)
shutdown -h now
लिनक्स पर) हो सकता है इस तरह के लिए की जरूरत को कम;)
आप शटडाउन करने के लिए निम्न आदेश जारी कर सकते हैं:
sudo init 0
और रिबूट करने के लिए:
sudo init 6
sudo telinit #
जहां # 0 और 6 के बीच एक संख्या है - टेलिनिट इनिट का एक प्रतीकात्मक लिंक है जो यह पहचानता है कि इसे इसके प्राथमिक नाम "इनिट" से नहीं बुलाया जा रहा है (और यह कि इसमें पीआईडी नहीं है 1!) इसलिए यह वास्तविक "इनिट" प्रक्रिया के लिए एक पाइप बनाता है और इसे वर्तमान रनवे को न्यूमेरिक तर्क के रूप में बताए गए नए मान में बदलने के लिए कहता है । telinit
का एक संकुचन है "नए रनवे को बताएं"।
जबकि प्रश्न का पहले ही पर्याप्त उत्तर दिया जा चुका है; मेरी प्राथमिकता अलग है जो पहले ही उत्तर दी जा चुकी है।
जैसा कि दूसरों ने कहा है कि केवल शक्ति खींचने से बचें। मेरी पसंदीदा कमांड (या तो रूट के रूप में या इसके साथ प्रस्तुत करना sudo
):
रोकने के लिए: halt
(व्हीजी और पूर्व के लिए यह आदेश भी सिस्टम को बंद कर देता है; जेसी के लिए यह वास्तव में पॉवरऑफ़ नहीं करता है हालांकि प्लग को एक बार समाप्त करने के लिए सुरक्षित है) halt -p
; shutdown now -h
या बस poweroff
जेसी के लिए आवश्यक हैं ...
दुबारा शुरू करना: reboot
मैं इन आदेशों को पसंद करता हूं क्योंकि वे सीधे आगे हैं, याद रखने में आसान और स्वयं स्पष्ट हैं ...
halt
या poweroff
, क्योंकि वे केवल shutdown -h now
GNU टूल के साथ ही उपनाम हैं , लेकिन अन्य प्रणालियों पर आप अपने सिस्टम को तुरंत बंद कर देंगे, जिससे आपके सभी प्रोग्राम मारे जाएंगे और संभवतः आपके फाइल सिस्टम को दूषित करेंगे। यह कहा गया है, आप इसे अधिकांश लिनक्स वितरण के साथ एक रास्पबेरी पाई पर उपयोग कर सकते हैं, लेकिन यदि आप सीखने के लिए पाई का उपयोग करते हैं, तो आप इसे "सही तरीके" से करना चाह सकते हैं।
halt
, poweroff
, reboot
और shutdown
करने के लिए सभी सिमलिंक हैं systemctl
(मूल आदेश भी पारित कर दिया साथ)। उसके बाद उपयुक्त SystemD लक्ष्य को ट्रिगर करता है: उदा poweroff.target
। FWIW poweroff.target
सिस्टम को शटडाउन करने के लिए ACPI कॉल को ट्रिगर करता है। इस दिन और उम्र में तो AFAIK poweroff
(या systemctl poweroff
) "सही तरीके से" है। :)
--no-preserve-root
झंडा है rm पर भरोसा मत करो । / बिन / श जा / बिन / बैश पर भरोसा मत करो (यह अब भी डेबियन आधारित सिस्टम के लिए सच नहीं है)। अक्सर "सही" तरीके का उपयोग करने की कोशिश करना उपयोगी होता है, भले ही यह वर्तमान में दूसरे तरीके से काम करता हो।
/bin/bash
। FYI करें मेरा दृष्टिकोण बहुत ही डेबियन-केंद्रित है ...
बस इसे फेंकने के लिए, यदि आप थोड़ा सा हार्डवेयर जोड़ रहे हैं, तो आप GPIO पिन को चुनने के लिए एक छोटा डेमन लिख सकते हैं और एक निश्चित पिन के अभिकथन पर पाई को रिबूट (या शटडाउन) कर सकते हैं।
साथ ही, यहाँ उल्लिखित सभी कमांड को SSH पर चलाया जा सकता है।
मुझे पता है कि यह मूल प्रश्न के 3 साल बाद है। लेकिन मुझे मेरा रास्पबेरी पाई मिल गया और अगर मुझे इसे मॉनिटर स्क्रीन से कनेक्ट करना भूल गया और इसका कोई नेटवर्क कनेक्शन नहीं है, तो मुझे इसे बंद करने में परेशानी हो रही है।
मैंने "pi_auto_shutdown" नाम की फ़ाइल वाले थंबड्राइव में प्लगिंग करके इसे 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()
मैं कमांड का उपयोग करके अपने RPi बॉक्स में ssh करता हूं
$ ssh rpi sudo पॉवरऑफ़
rpi मेरे RPi बॉक्स के IP एड्रेस के लिए अन्य नाम है और इसे ~ / .ssh / config फाइल में परिभाषित किया गया है ।