วิธีที่ดีที่สุดในการลบคำสั่งปิดเครื่อง แต่ให้รีบูต


27

ฉันมีอุปกรณ์ประเภท raspi ในศูนย์ข้อมูลและเมื่อไม่นานมานี้อ้วนอ้วนโดยไม่ตั้งใจและวางคำสั่งปิดเครื่องในเทอร์มินัลผิดบนหน้าจอของฉัน มีวิธีเก็บshutdown -rแต่ลบ#poweroff #shutdown -P -Hตัวเลือกหรือไม่

ฉันต้องการรักษาshutdown -r คำสั่ง ฉันชอบที่จะตั้งเวลาไว้ถ้าฉันจัดการเพื่อหยุดระบบหรือล็อคตัวเองด้วยกฎตารางไอพี ตัวอย่างshutdown -r +10

คำตอบ:


39

คุณควรใช้การกระจาย Linux บนระบบ ในกรณีนี้คุณควรจะสามารถปกปิดเป้าหมาย poweroff เพื่อให้ systemd ปฏิเสธที่จะดำเนินการ (และปิดเครื่อง) เช่น:

systemctl mask poweroff.target

สิ่งนี้ทำให้ไม่สามารถปิดระบบได้อย่างเต็มที่นอกเหนือจากการบูตเครื่องใหม่ ดูว่าไม่มีอะไรเกิดขึ้น:

ตัวอย่างภาพเคลื่อนไหว Debian9

ในกรณีนี้สวิตช์ไฟเสมือนของ VM นี้ไม่สามารถปิดระบบได้อีกต่อไป แต่ก็ยังรีบูตได้ดีอย่างสมบูรณ์

หากต้องการเลิกทำการเปลี่ยนแปลงแน่นอนเพียงเปิดโปงเป้าหมาย จากนั้นคุณสามารถปิดระบบ

systemctl unmask poweroff.target

2
มีคำสั่ง systemd ซึ่งแสดงรายการบริการ / เป้าหมาย / อุปกรณ์ทั้งหมดพร้อมคำอธิบาย (ถ้ามี) หรือไม่? ฉันเพิ่งเริ่มอ่านเกี่ยวกับเรื่องนี้และชอบที่จะสำรวจความเป็นไปได้
hjpotter92

1
@ hjpotter92 เรียกใช้systemctlโดยไม่มีข้อโต้แย้ง มันจะแสดงรายการหน่วยที่ใช้งานทั้งหมดสถานะของพวกเขาและคำอธิบาย เพิ่ม--allและจะแสดงรายการหน่วยที่ไม่ได้ใช้งาน
Michael Hampton

2
@ hjpotter92 man systemd.specialลองดูที่
TooTea

16

มีสองสามวิธีในการบรรลุเป้าหมายนี้ หนึ่งจะทำงานกับบัญชีที่ไม่ได้รับสิทธิพิเศษซึ่งจะต้องใช้คำสั่งด้วย sudo และป้อนรหัสผ่าน จากนั้นคุณสามารถผนวก follwing ไปที่ / etc / sudoers (โดยเรียกใช้ visudo):

## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *

นอกจากนี้หากต้องการปิดใช้งานการแคชหนังสือรับรอง sudo ให้เพิ่มรายการต่อไปนี้ด้วย:

Defaults timestamp_timeout=0

สิ่งนี้จะป้องกันการแคชข้อมูลรับรองในกรณีที่คุณเรียกใช้คำสั่งด้วย sudo ก่อน

ตัวอย่าง:

[root@ops ~]# su - jdoe
[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
[jdoe@ops ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:

สังเกตว่าในตัวอย่างข้างต้นฉันไม่จำเป็นต้องป้อนรหัสผ่านของฉันเมื่อทำงานsudo shutdown -r +10แต่สำหรับส่วนที่เหลือฉันเป็น หากคุณต้องการลบความต้องการในการพิมพ์ sudo หน้าคำสั่ง ( sudo shutdown -r +10) ให้เพิ่มสิ่งต่อไปนี้ใน. bash_profile หรือ. bashrc ของคุณ:

alias shutdown="sudo shutdown"

ตัวอย่าง:

[jdoe@ops ~]$ source ~/.bash_profile
[jdoe@ops ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ shutdown -c
[sudo] password for jdoe:

โปรดทราบว่าเป็นแนวปฏิบัติที่ดีที่สุดในการทำงานกับบัญชีที่ไม่มีสิทธิพิเศษและเพิ่มระดับด้วย sudo เมื่อจำเป็น


1
นี่เป็นสิ่งที่ดียกเว้นsudoการกำหนดค่าเริ่มต้นของมันจะมีข้อมูลรับรองแคชเป็นระยะเวลาหลังจากการเรียกใช้ครั้งแรก สิ่งนี้จะสะดวกเมื่อทำการประมวลคำสั่งซ้ำตามที่rootต้องการในเซสชันผู้ใช้ ในเซสชั่นดังกล่าว (หรือถ้าrootเชลล์ทำงานอยู่) มันจะเป็นไปได้ทั้งหมดที่จะทำธุรกรรมคำสั่งshutdownและหลีกเลี่ยงการตรวจสอบ
Ossifrage จักรวาล

ขอบคุณสำหรับการป้อนข้อมูล อย่างไรก็ตามในกรณีนี้เรากำหนดค่าshutdown -rให้ไม่แจ้งให้ใส่รหัสผ่านเมื่อใช้งานด้วย sudo ดังนั้นหากเขาเรียกsudo shutdown -r ...ใช้ข้อมูลประจำตัวจะไม่ถูกแคชเนื่องจากจะไม่ถูกป้อน ดูตัวอย่างที่ฉันให้ไว้ข้างต้นคุณจะเห็นว่าฉันวิ่งไปแล้วตามด้วย a sudo shutdown -Hและฉันถูกถามให้ใส่รหัส
John Doe

3
แน่นอนว่าเข้าใจ แต่ให้พิจารณาสถานการณ์ที่คำสั่งสุดท้ายนำหน้าด้วยsudoและไม่ใช่การNOPASSWDดำเนินการ เช่นการโทรเพื่อแก้ไขไฟล์กำหนดค่าเป็นรูท ในอินสแตนซ์นี้รหัสผ่านจะถูกแคชและการโทรในภายหลังsudo shutdown -Hจะผ่าน sudoการแคชรหัสผ่านของจะต้องถูกปิดการใช้งานเพื่อหลีกเลี่ยงปัญหานี้
Ossifrage จักรวาล

2
ในกรณีนี้คุณถูกต้อง +1 สำหรับการปิดใช้งานการแคชรหัสผ่าน แก้ไขความคิดเห็นของฉันด้วยคำแนะนำ ขอบคุณ!
John Doe

2
จริง ๆ แล้วฉันไม่ชอบสิ่งนี้เลยเพราะมันขึ้นอยู่กับสถานะของรหัสผ่าน sudo เพื่อเตือนผู้ใช้ไม่ให้ทำสิ่งที่พวกเขาไม่ควรทำ แต่รหัสผ่านไม่ได้ตอบสนองวัตถุประสงค์นี้จริงๆ มันเป็นคำถามที่ถามกันบ่อยๆsudoว่าเราแค่พิมพ์รหัสผ่านและเดินหน้าต่อไป ดูที่นี่สำหรับวิธีอื่นโดยใช้ sudo (ซึ่งอาจดีกว่ามากแม้ว่าจะไม่ดีมาก)
Michael Hampton

10

มีเครื่องมือที่เรียกว่ามอลลี่ - การ์ดที่ต้องการให้คุณระบุชื่อโฮสต์ของเครื่องที่คุณต้องการปิดหรือรีบูต

ในกรณีที่คุณไม่ได้ใช้ Debian คุณควรรวบรวมจากแหล่งที่มาเล็กน้อยเนื่องจากโปรแกรมนั้นค่อนข้างดั้งเดิม


9

เพื่อป้องกัน mishaps RHEL ตามการตั้งค่านามแฝงrmแล้วcpและmvสามารถทำลายได้ค่อนข้างมากเมื่อดำเนินการโดยผู้ใช้รูท

คุณสามารถเพิ่มของคุณเองเช่น:

#/root/.bashrc
alias poweroff='echo  "poweroff: Command disabled - THINK before you type.
  Use /usr/sbin/poweroff if you really want to drive to the DC to restore power."'

2
วิธีนี้ยังคงshutdown -rปิดการใช้งานในขณะที่shutdown -P -H?
MSalters

3

เปลี่ยนชื่อการปิดระบบที่ปฏิบัติการได้เป็นสิ่งที่เป็นไปไม่ได้ที่จะเรียกใช้โดยไม่ได้ตั้งใจ

จากนั้นนามแฝงshutdownที่จะ(whatever) -r


1
คุณช่วยอธิบายวิธีเปลี่ยนชื่อไฟล์ปฏิบัติการได้ไหม ในอนาคตจะมีการอัพเกรดแพ็คเกจหรือไม่
อัล

2
@AL มันจะทำลายการอัพเกรดแพ็คเกจในอนาคตหรือไม่? ใช่มันทำได้ มันอาจทำลายสิ่งที่ติดตั้งไว้แล้ว โดยทั่วไปแล้วการล้อเล่นกับบางส่วนของการติดตั้งระบบปฏิบัติการนั้นเป็นความคิดที่แย่มาก
Andrew Henle

1
ตกลง. มันเพียงพอที่จะนามแฝงไปshutdown /sbin/shutdown -rไม่จำเป็นต้องเปลี่ยนชื่อ เนื่องจากการขยายนามแฝงหมายถึงเส้นทางสัมบูรณ์จึงไม่ต้องมีการขยายชื่อแทนซ้ำ
MSalters

ข้อแม้หนึ่ง - ฉันคิดว่า 'ไม่มีอะไรที่เป็นไปไม่ได้' - ไม่น่าจะเป็นไปได้
JosephDoggie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.