ฉันรู้ว่าคุณสามารถกำหนดเวลาปิดเครื่องตามเวลาที่กำหนดได้shutdown -h 21:45และคุณไม่ควรใช้ crontabs สำหรับสิ่งต่าง ๆ เนื่องจากลักษณะที่ซ้ำซ้อน ฉันจะกำหนดปิดระบบสำหรับวันที่เฉพาะเช่น 31 สิงหาคมเวลา 20:00 น. ได้อย่างไร
ฉันรู้ว่าคุณสามารถกำหนดเวลาปิดเครื่องตามเวลาที่กำหนดได้shutdown -h 21:45และคุณไม่ควรใช้ crontabs สำหรับสิ่งต่าง ๆ เนื่องจากลักษณะที่ซ้ำซ้อน ฉันจะกำหนดปิดระบบสำหรับวันที่เฉพาะเช่น 31 สิงหาคมเวลา 20:00 น. ได้อย่างไร
คำตอบ:
Ubuntu รุ่นล่าสุดใช้ systemd และเมื่อไม่ได้ติดตั้งหรือไม่ใช้งานตัวกำหนดการธรรมดาatdและที่เกี่ยวข้องatสำหรับคำสั่งแบบใช้ครั้งเดียวsystemd-runหรือไม่ใช้คำสั่งแบบใช้ครั้งเดียว   ซึ่งค่อนข้างง่ายกว่าการสร้างด้วยตนเองsystemd timer:  
 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
atคำสั่งอย่างใดอย่างหนึ่งการตั้งเวลาปิดการประหารชีวิตในอนาคต
เช่น
% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019
("<EOT>" ถูกสร้างขึ้นโดยการกด control-D)
% atq
161     Sat Aug 31 20:00:00 2019 a sweh
คุณสามารถใส่shutdownคำสั่งของคุณที่นี่
atเมื่อฉันโพสต์ - atมีความหมายโดยทั่วไปสำหรับเรื่องนี้ถึงแม้ว่าใน บริษัท วิธีการที่ยอมรับอาจเป็นatหรือcronขึ้นอยู่กับอนุสัญญาที่เกี่ยวข้องกับการจัดการการกำหนดค่า / การปรับใช้
                    atecho "echo yup > $(tty)" | at nowนอกจากนี้ยังสามารถที่จะใช้คำสั่งจากท่อ:
                    ในขณะที่atเป็นวิธีที่ชัดเจนในการทำเช่นนี้ฉันคิดว่ามันจะอยู่รอดได้เมื่อปิดเครื่องดังนั้นหากเครื่องรีบูตก่อนที่จะปิดเครื่องตามกำหนดเวลามันอาจปิดเครื่องอีกครั้งตามเวลาที่กำหนด ดังนั้นเมื่อใช้ bash และ GNU เราจึงสามารถปิดการใช้งานล่าช้าได้
/sbin/shutdown +$((  ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))
หมายเหตุ: นี่ถูกต้องเพียงหนึ่งนาที มันทำงานได้โดยการแปลงเวลาที่กำหนดและตอนนี้ถึงวินาทีตั้งแต่ UNIX ยุคคำนวณความแตกต่างแปลงเป็นนาทีแล้วใช้สิ่งนี้เป็นความล่าช้าในการปิด มันจะทำงานไม่ถูกต้องหากเวลาที่กำหนดไว้ในอดีต
คุณใช้shutdownคำสั่งที่ดีกว่า
shutdownคำสั่งvan Smoorenburg, Upstart และ systemd ไม่อนุญาตการระบุวันที่ แต่การ bsd คำสั่งยิงค่าวันที่ในข้อมูลจำเพาะของเวลาที่จะปิดตัวลงในรูปแบบshutdown yymmddhhmmนี่เป็นกรณีที่เกิดขึ้นตั้งแต่ 4BSD และยังคงเป็นเช่นนั้นกับ FreeBSD และ OpenBSD NetBSD ccyymmddhhmmขยายไปยัง
เนื่องจากชุดเครื่องมือ nosh นั้นยังสามารถใช้งานได้บนBSD ฉันจึงให้shutdownความสามารถแบบเดียวกันกับคำสั่งของฉันโดยขยายเป็นCCYYMMDDHHMMNetBSD และเนื่องจากชุดเครื่องมือ nosh นั้นยังสามารถใช้งานบน Linux ได้ซึ่งทำให้ Linux มีคำสั่งปิดที่ใช้วันที่
มันแน่นอนทำงานร่วมกับ system-managerNosh มันยังทำงานได้กับระบบอื่น ๆ มันส่งสัญญาณไปยังโพรเซส 1 เพื่อออกกฎหมายและผู้จัดการสัญญาณอื่น ๆ ก็เข้าใจเช่นเดียวกันsystemdซึ่งสามารถปิดการใช้งานได้  
คุณสามารถใช้มันหรือเครื่องมือเช่นนั้น หรือคุณอาจจะพยายามที่จะชักชวนให้ผู้เขียนของลินุกซ์อื่น ๆโปรแกรมที่จะขยายเครื่องมือของพวกเขายังจะเป็นความสามารถในขณะที่การ bsdshutdownshutdown
shutdown. หน้าคู่มือเครื่องมือ โปรแกรมsystem-manager. หน้าคู่มือเครื่องมือ โปรแกรมshutdown.  คู่มือการใช้งานระบบการจัดการของ หน้าคู่มือ NetBSD 2011/11/04shutdown.  ผู้จัดการระบบ FreeBSD คู่มือการใช้งาน 2018/01/01shutdown. หน้าคู่มือ OpenBSD 2015/01/21ในการทำงานเฉพาะปีนี้:
0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now
ในการทำงานทุก ๆ ปี:
0 20 31 8 * /sbin/shutdown now
อาจมีตัวเลือกในการป้อนปีให้กับshutdownคำสั่ง แต่ cron สามารถใช้เพื่อเรียกใช้คำสั่งเพียงครั้งเดียวในเวลาที่ระบุ สำหรับตัวอย่างของคุณลอง
0 0 31 8 ? 2019  shutdown
ระวัง: ข้างต้นไม่ใช่ไวยากรณ์ cron มาตรฐาน
yearฟิลด์ในcrontabกำหนดการ
                    
shutdownเครื่องมือบรรทัดคำสั่งของมันก็ไม่ได้ให้ความสามารถในการเข้าถึงนี้เพราะมันไม่ได้ขึ้นอยู่กับหุ้นที่มีบรรทัดคำสั่งของการ bsd ขณะที่ผมเขียนไว้ในคำตอบอื่นคุณที่ต้องการนี้อาจพยายามชักจูงคน systemd ที่จะทำให้พวกเขาshutdownเป็นเครื่องมือที่มีความสามารถมากขึ้นด้วยไวยากรณ์ของทศวรรษที่ผ่านมายืนแทนที่จะไปรอบ ๆsystemd-runบ้านด้วย