จะปิดเครื่องคอมพิวเตอร์หลังจากงานเสร็จสิ้นได้อย่างไร?


25

ฉันมักจะเริ่มดาวน์โหลดก่อนไปโรงเรียน
คำสั่งใดที่ฉันควรใช้เพื่อทำการบันทึกที่จำเป็นโดยอัตโนมัติและปิดเครื่องคอมพิวเตอร์หลังจากงานเฉพาะเสร็จสมบูรณ์
(พูดหลังจากติดตั้งการอัปเดตหรือหลังจากดาวน์โหลดไฟล์ขนาดใหญ่)

ฉันยังข้ามโพสต์ที่askubuntu

คำตอบ:


25

มันขึ้นอยู่กับคุณเริ่มงาน หากเป็นเครื่องมือบรรทัดคำสั่งคุณสามารถเรียกใช้haltหรือshutdown -h now:

  1. wget http://..../somelargefile; halt- haltจะถูกดำเนินการหลังจากwget

  2. wget http://..../somelargefile && halt- haltจะถูกดำเนินการหากwgetไม่มีข้อผิดพลาด

  3. wget http://..../somelargefile || halt- haltจะถูกดำเนินการหากมีwgetข้อผิดพลาดในการส่งคืน

ทางเลือกในการใช้สิ่งนี้kshutdown- ในแอพนี้คุณสามารถระบุการกระทำที่ควรทำ (รีบูต / ปิดระบบ / จำศีล / ฯลฯ หรือการดำเนินการคำสั่ง) และเมื่อ (หลังจากผ่านไประยะหนึ่งหรือเมื่อแอปพลิเคชันอื่นออก) หากคุณต้องการใช้เครื่องมือนี้คุณต้องเลือกกระบวนการที่ถูกต้อง - ยูทิลิตี้การอัพเดตบางตัวจะเริ่มกระบวนการย่อยน้อย

KShutdown


4
คุณสามารถให้shutdownเวลาในการรอ ไม่จำเป็นต้องใช้ kshutdown เพื่อจุดประสงค์นั้น
Cascabel

1
ไม่ แต่shutdownไม่มีวิธีการรอเหตุการณ์จริง
Shadur

18

ทุกกระบวนการมีชื่อไดเรกทอรีตามกระบวนการ id (pid) ในprocระบบไฟล์ ดังนั้นคุณสามารถรอการยุติกระบวนการที่ระบุได้โดยตรวจสอบว่าไดเรกทอรีนั้นมีอยู่ซ้ำ ๆ

คุณสามารถใช้สิ่งนี้เพื่อปิดระบบหลังจากกระบวนการยุติเช่นนี้ (แทนที่ 2296 โดย pid เพื่อรอ):

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

ข้อดี:

  • คุณสามารถตัดสินใจว่าจะปิดเครื่องหรือไม่หลังจากการปิดคำสั่งเชลล์
  • การปิดระบบจะถูกใช้เป็นรูทคำสั่งรอไม่จำเป็นต้องทำในฐานะรูท (ไม่จำเป็นต้องแก้ไขปัญหาsudoพร้อมท์ - รหัสผ่านล่าช้า)

ข้อเสีย:

  • อาจเกิดขึ้นได้ว่ากระบวนการของคุณยุติลงและระบบปฏิบัติการจะนำ pid เดียวกันมาใช้เพื่อให้เกิดกระบวนการที่เพิ่งเกิดใหม่ภายในวินาทีนั้น (สภาวะการแข่งขัน) ดังนั้นคุณจะต้องรอให้กระบวนการใหม่นั้นสิ้นสุดลง

2
จุดหลัก: ใช้งานได้แม้ว่ากระบวนการได้เริ่มขึ้นแล้ว
ไฮเซนเบิร์ก

หากคุณเริ่มต้นบางอย่างจากเทอร์มินัลที่คุณยังคงเปิดpsอยู่ในเทอร์มินัลเดียวกันนั้นจะช่วยให้คุณมองเห็น PID สำหรับ CMD หากกระบวนการเป็น / อยู่ในเทอร์มินัลอื่นจะบีบเอาท์พุท ps สำหรับทุกอย่างผ่าน grep เพื่อกรองคำสั่งของคุณควรช่วยคุณหามันps -elf | grep <command_related_word>
TafT

ตรวจสอบคำตอบของฉันให้ดีขึ้นตามgrep กระบวนการpgrep aka ...
Gilles Quenot

ฉันจะใส่คำสั่งนี้เป็นพื้นหลังได้อย่างไร?
DerWeh

1
@DerWeh ห่อไว้ในเชลล์สคริปต์และทำตามขั้นตอนที่ระบุไว้ที่นี่: stackoverflow.com/q/625409/1025391
moooeeeep

3

คุณสามารถใช้ตัวดำเนินการ&&และ||เพื่อโยงคำสั่งเข้าด้วยกัน ตัวอย่างเช่น:

apt-get update && sleep 2 && init 0

ซึ่งจะทำการอัปเดตระบบโดยใช้ความถนัด, รอ 2 วินาทีและไปที่ runlevel 0 ขึ้นอยู่กับระบบของคุณซึ่งอาจจะจริงหรือไม่อาจปิดฮาร์ดแวร์

หากต้องการพูดคุยกับการดำเนินการอย่างน้อยหนึ่งอย่างหลังจากการดำเนินการตามอำเภอใจมากกว่าเช่นเว็บเบราว์เซอร์ดาวน์โหลดคุณจะต้องใช้ตรรกะเพิ่มเติมเพื่อดูไฟล์ดาวน์โหลดเพื่อตรวจสอบว่าการดาวน์โหลดเสร็จสมบูรณ์แล้วอย่างไรก็ตามตรรกะของเชลล์ไม่เปลี่ยนแปลง


3

หากคุณต้องการตรวจสอบกระบวนการที่เริ่มต้นแล้วคุณสามารถทำได้ใน :

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now

1

มีแอพพลิเคชั่นชื่อ sentinella ซึ่งสามารถทำเพื่อคุณด้วย GUI: sentinella

สำหรับการติดตั้ง:

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