วิธีการปิด Linux ในช่วงเวลาที่กำหนดจากเทอร์มินัล


46

ดูเหมือนว่าฉันสามารถปิดการใช้งานsudo shutdownโดยระบุเวลาหรือนาที

มีวิธีการระบุวันที่และเวลาสำหรับการปิดระบบหรือไม่?

คำตอบ:


77

คุณสามารถทำได้โดยตรงจากshutdown command, ดูman shutdown:

SYNOPSIS
   /sbin/shutdown [-akrhPHfFnc] [-t sec] time [warning message]

[...]

   time   When to shutdown.

ตัวอย่างเช่น:

shutdown -h 21:45

ที่จะทำงานshutdown -hที่ 21:45


สำหรับคำสั่งที่ไม่มีฟังก์ชั่นนี้คุณสามารถลองหนึ่งใน:

A. การใช้งานที่

atภูตถูกออกแบบมาสำหรับแม่นยำนี้ คุณอาจต้องติดตั้งขึ้นอยู่กับระบบปฏิบัติการของคุณ บนระบบที่ใช้เดเบียนสามารถทำได้ด้วย:

sudo apt-get install at

มีสามวิธีในการให้คำสั่งแก่at:

  1. ท่อมัน:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. บันทึกคำสั่งที่คุณต้องการเรียกใช้ในไฟล์ข้อความจากนั้นส่งไฟล์นั้นไปที่at:

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. คุณยังสามารถส่งatคำสั่งจาก STDIN:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    จากนั้นกดCtrlDเพื่อออกจากatเปลือก lsคำสั่งจะถูกเรียกใช้ในหนึ่งนาที

คุณสามารถให้เวลาที่แม่นยำมากในรูปแบบของ[[CC]YY]MMDDhhmm[.ss]เช่นเดียวกับใน

$ at -t 201403142134.12 < script.sh

สิ่งนี้จะเรียกใช้สคริปต์script.shเวลา 21:34 และ 12 วินาทีในวันที่ 14 มีนาคม 2014

B. ใช้ cron (แม้ว่าจะไม่ใช่ความคิดที่ดีสำหรับการปิดระบบ)

อีกวิธีคือใช้ตัวcronกำหนดตารางเวลาซึ่งออกแบบมาเพื่อทำงานตามเวลาที่กำหนด มันมักจะใช้สำหรับงานที่จะทำซ้ำ แต่คุณสามารถให้เวลาที่กำหนด ผู้ใช้แต่ละคนมี "crontabs" ของตนเองซึ่งควบคุมงานที่จะดำเนินการและเมื่อใด รูปแบบทั่วไปของ crontab คือ:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

ตัวอย่างเช่นสิ่งนี้จะทำงานlsทุกวันเวลา 14:04 น:

04 14 * * * ls

วิธีตั้งค่า cronjob สำหรับวันที่ระบุ:

  1. สร้าง crontab crontab -eใหม่โดยการทำงาน นี่จะเป็นการเปิดหน้าต่างโปรแกรมแก้ไขข้อความที่คุณโปรดปราน

  2. เพิ่มบรรทัดนี้ลงในไฟล์ที่เพิ่งเปิด ตัวอย่างเฉพาะนี้จะทำงานเวลา 14:34 ในวันที่ 15 มีนาคม 2014 ถ้าวันนั้นเป็นวันศุกร์ (เช่นนั้นตกลงมันอาจทำงานมากกว่าหนึ่งครั้ง):

    34 14 15 5  /path/to/command        
    
  3. บันทึกไฟล์และออกจากโปรแกรมแก้ไข

คำตอบ SO นี้ชี้ให้เห็นวิธีที่จะให้มันทำงานเพียงครั้งเดียว แต่ฉันไม่เคยใช้มันดังนั้นฉันจึงไม่สามารถรับรองได้


2
การกำหนดเวลาปิดเครื่องด้วย cron เป็นนิสัยที่ไม่ดีจริงๆ ทันใดนั้นคุณจะสงสัยว่าทำไมเซิร์ฟเวอร์ไม่ทำงานทุกเช้าวันจันทร์
Ouki

4
@Ouki ฉันขอโทษ แต่ฉันไม่เห็นว่าฉันแนะนำให้ใช้ cron ในการปิดระบบ ฉันพูดถึงในวงเล็บว่าเป็นไปได้ (เป็น) แต่ไม่แนะนำ เรามักจะชอบคำตอบที่ครอบคลุมที่นี่ซึ่งเป็นเหตุผลที่ผมเสนอทางเลือกอื่น ๆ shutdownในขณะที่พวกเขาไม่เคยบอกควรจะใช้สำหรับ แม้ว่าฉันจะรู้สึกถึงประสบการณ์ที่เลวร้ายนั่นก็ไม่น่ายินดี
terdon

2
นี่เป็นคำแนะนำเพิ่มเติมเกี่ยวกับการผสมผสานระหว่างshutdownการกำหนดเวลาและcronในคำตอบเดียวกัน ... ไม่ว่าจะเป็นเวิร์กสเตชันหรือเซิร์ฟเวอร์อีเมลของผู้ใช้ 1,000 ราย (ประสบการณ์ที่น่าเศร้าของฉัน) เป็นเรื่องเกี่ยวกับผลที่ตามมาของนิสัยที่ไม่ดี
Ouki

3
ฉันอยู่กับ Ouki ที่นี่ เมื่อพูดถึงหนึ่งไม่ควรจะรวมถึงshutdown cron(โดยเฉพาะกับใครบางคนที่ไม่รู้ว่าทำไมมันเป็นความคิดที่น่ากลัว)
Ricky Beam

2
ฉันสับสนเล็กน้อยว่าคำตอบนี้ดูเหมือนจะนำไปสู่ข้อมูลที่สันนิษฐานแล้วโดยคำถาม ดูเหมือนว่า OP จะรู้วิธีระบุเวลาสำหรับปิดเครื่อง แต่ต้องการทราบวิธีระบุทั้งวันที่และเวลา ที่มีการระบุไว้ในคำตอบนี้ แต่จะให้ราวกับว่ามันเป็นข้อมูลเพิ่มเติมเมื่อมันเป็นสิ่งที่ถูกถามในตอนแรก
Weeble

24

ไม่คุณไม่สามารถระบุวันที่ที่คำสั่ง shutdown ได้ แต่มีสองทางเลือก:

1)ที่ง่ายที่สุดคือการใช้เวลาคำสั่ง ตัวอย่างต่อไปนี้จะทำงานshutdown +5ในเวลาและวันที่ระบุ:

echo "shutdown +5" | at 10:05am 2019-01-19

2)หากคุณไม่คำนึงถึงการใช้เครื่องคิดเลขและต้องการปิดระบบใน 24 ชั่วโมง (24 * 60 = 1440 นาที) และคุณมั่นใจอย่างยิ่งว่าระบบจะไม่รีบูตในระหว่าง:

shutdown -r +1440

2
เหตุผลสำหรับคำตอบของฉันข้างต้น: คำตอบ terdon เป็นที่ถูกต้องและครอบคลุมมาก แต่ช่างพูดเกินไป (IMHO อย่างน้อย)
ndemou

2
หากพูดถึงช่างพูดคุณหมายถึงมีประโยชน์และครอบคลุม ... คำตอบของคุณไม่ได้อธิบายatคำสั่งด้วยซ้ำ
แอนโทนี่

@ แอนโทนี่ฉันเชื่อว่าวิธีการใช้งานนี้atไม่สมควรได้รับการอธิบาย ฉันสามารถเห็นคุณเชื่อเป็นอย่างอื่น มุมมองที่แตกต่าง
ndemou

คำตอบนี้ไม่เป็นความจริงอีกต่อไป shutdownคำสั่งvan Smoorenburg, Upstart และ systemd ไม่อนุญาตการระบุวันที่ แต่ชุดเครื่องมือของ nosh shutdownทำหน้าที่สนับสนุนไวยากรณ์ BSD ที่ยาวนาน
JdeBP

@JdeBP: คุณเชื่อว่าสองทางเลือกใดที่ไม่เป็นความจริงอีกต่อไปและคุณได้ทำการทดสอบและตรวจสอบความถูกต้องแล้วหรือยัง? ฉันเพิ่งทดสอบทั้งสองคำสั่งใน 3 ระบบ (Ubuntu 18.04,16.04 และ CentOS 7) และพวกเขาก็ทำงานได้ดี เกี่ยวกับความคิดเห็นที่เหลือของคุณ ("The Van Smoorenburg ... ") ฉันไม่แน่ใจว่ามันเป็นคำชี้แจงของคุณหรือไม่ว่าคำตอบนี้ไม่เป็นความจริงอีกต่อไปหรือเป็นความคิดเห็นทั่วไป บางทีคุณควรโพสต์คำตอบด้วยข้อมูลอีกเล็กน้อย
ndemou

6

มันจะปิดระบบของคุณเวลา 12:00 น.:

$ sudo shutdown -h 12:00

ตัวเลือก:

-h, -P, --poweroff

ปิดเครื่อง

-r, --reboot

รีบูทเครื่อง

-c

ยกเลิกการปิดระบบที่ค้างอยู่


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