จะเริ่มต้นใหม่ทุก ๆ 30 นาทีโดยอัตโนมัติได้อย่างไร


14

ฉันต้องการกำหนดการรีสตาร์ท Ubuntu ของฉันทุก ๆ 30 นาที มีคำสั่งหรือวิธีการแบบกราฟิกที่จะทำมันได้หรือไม่


12
ฉันแค่อยากรู้อยากเห็น: อะไรคือจุดประสงค์ของการเริ่มต้นใหม่ทุก ๆ 30 นาที?
RafałCieślak

คำตอบ:


30

วิธีที่ดีที่สุดในการทำเช่นนี้ขึ้นอยู่กับสาเหตุที่คุณต้องการให้ Ubuntu เริ่มการทำงานใหม่ทุกครึ่งชั่วโมง

ดังนั้นฉันขอแนะนำให้แก้ไขคำถามของคุณเพื่ออธิบายว่าทำไมคุณต้องการทำเช่นนี้

รีบูตทุก ๆ 30 นาทีและเตือนผู้ใช้ก่อนรีบูตแต่ละครั้ง:

สมมติว่าผู้คนกำลังใช้งานเครื่องอยู่ไม่ว่าจะอยู่ในท้องถิ่นหรือจากระยะไกลขอแนะนำให้หลีกเลี่ยงการเริ่ม Ubuntu ใหม่จากข้างใต้โดยไม่มีการเตือนใด ๆ ดังนั้นแทนที่จะตั้งเวลาrebootคำสั่งฉันแนะนำให้ตั้งเวลาshutdownคำสั่งเพื่อเตือนผู้ใช้

หากต้องการกำหนดเวลาปิดเครื่องทุกครึ่งชั่วโมงโดยมีคำเตือน 5 นาทีก่อนหน้าให้เพิ่มสิ่งนี้ใน/etc/crontab:

#minute hour    mday    month   wday    user    command
*/30    *       *       *       *       root    shutdown -r +5

คุณไม่จำเป็นต้องเพิ่มบรรทัดกำปั้นซึ่งเป็นความคิดเห็น ฉันได้รวมมันไว้เพื่อความกระจ่างแล้ว - บางอย่างที่มันมีอยู่แล้ว

  • นี่จะกำหนดเวลาให้ระบบทำการรีบูท ( -r) ห้านาทีหลังจาก ( +5) คำสั่งรัน มันทำงานทุก ๆ ที่เครื่องหมายครึ่งชั่วโมง ( */30) ดูและman cronman 5 crontab
  • เปลี่ยน+5เป็นอย่างอื่นเพื่อเปลี่ยนแปลงระยะเวลาที่ผู้ใช้มีหลังจากถูกเตือนการรีบูต
  • 0,30ภายใต้นาทีจะทำงานถ้าคุณต้องการที่ (ในทำนองเดียวกันถ้าเป็นทุก ๆ 20 นาทีคุณสามารถเขียน*/20หรือ0,20,40)
  • ให้แน่ใจว่า/sbinอยู่ในตัวแปรที่ระบุอยู่ใกล้ด้านบนของPATH /etc/crontabมิฉะนั้นshutdown(ใต้command) /sbin/shutdownจะต้องถูกเรียกว่าเป็น

คำสั่งจะทำงานบนเครื่องหมายครึ่งชั่วโมงเสมอหากเครื่องทำงานและทำงานในเวลานั้น นี่จะทำให้การปิดระบบถูกประกาศทุกครึ่งชั่วโมงและดำเนินการที่ 5 นาทีและ 35 นาทีที่ผ่านมาทุกชั่วโมง

  • sudo shutdown -cหนึ่งประโยชน์ที่นี่เป็นที่ที่ผู้ดูแลระบบสามารถยกเลิกการปิดเพียงแค่ประกาศ
  • หากคอมพิวเตอร์ไม่ทำงานในช่วงเวลาที่ระบุเมื่อมีการเรียกใช้คำสั่งที่กำหนดเวลาไว้คอมพิวเตอร์จะไม่ทำงาน หากนั่นไม่เพียงพอกับความต้องการของคุณคุณจะต้องกำหนดเวลาการบู๊ตใหม่ให้แตกต่างกัน (นี่ไม่ได้เฉพาะเจาะจงกับการใช้shutdownแต่จะนำไปใช้อย่างเท่าเทียมกันหากคุณกำหนดเวลาreboot) ในกรณีนี้โปรดแก้ไขคำถามของคุณเพื่ออธิบายความต้องการเฉพาะของคุณ (ฉันแนะนำanacronสำหรับเรื่องนี้ แต่ช่วงเวลาของคุณสั้นเกินไป)

ช่วยให้ผู้ดูแลระบบสามารถป้องกันการรีบูตอัตโนมัติได้ง่ายขึ้น:

คุณอาจต้องการตั้งค่านี้เพื่อให้ผู้ดูแลระบบสามารถระงับการรีบู๊ตที่กำหนดโดยอัตโนมัติทั้งหมดได้:

#minute hour    mday    month   wday    user    command
*/30    *       *       *       *       root    [ -e /etc/noautoreboot ] || shutdown -r +5

ตารางเวลานี้เรียบทางเดียวกัน - ทุกครึ่งชั่วโมงกับห้านาทีเตือน - ยกเว้นว่ามันจะไม่ได้กำหนดเวลาการรีบูตถ้าไฟล์ที่เรียกว่าอยู่ในnoautoreboot/etc

  • ผู้ดูแลระบบสามารถสร้างไฟล์ควบคุมนี้ได้ด้วย:

    sudo touch /etc/noautoreboot
    
  • สามารถลบได้ด้วย:

    sudo rm /etc/noautoreboot
    
  • โปรดทราบว่าไฟล์มีอยู่หรือไม่ไม่ใช่สิ่งที่มีอยู่

  • ถ้าเริ่มต้นใหม่ที่กำหนดไว้และผู้ใช้จะเตือนแล้วไฟล์จะถูกสร้างขึ้น (ที่จะเกิดขึ้นทันที) รีบูตจะยังคงเกิดขึ้น

  • มันทำงานอย่างไร มันใช้ไฟฟ้าลัดวงจร - ประเมินหรือผู้ประกอบการ ( ||) เป็นชวเลขสำหรับ:

    ถ้า ไม่ได้อยู่วิ่ง/etc/noautorebootshutdown -r +5

    คำตอบนี้อธิบายวิธีลัดวงจรและและหรือผู้ปฏิบัติงานสามารถif- thenตรรกะ สำหรับคำอธิบายสั้น ๆ ที่ใช้งานง่ายและไม่เป็นทางการคุณสามารถอ่านคำสั่งด้วยวิธีนี้:

    /etc/noautorebootมีอยู่! shutdown -r +5หรือเรียกใช้

    ดูman [เพื่อดูว่าการทดสอบดำเนินการอย่างไร


12

ฉันชอบทำสิ่งนี้โดยบอก Session Manager ว่าเราต้องการรีบูต สิ่งนี้สามารถทำได้โดยไม่ต้องใช้สิทธิ์รูทและเราได้หน้าต่างที่ดีที่เตือนเราว่าระบบจะทำการรีบูท -even เราสามารถยกเลิกการรีบู๊ตได้หากเราต้องการ

วิธีกราฟิก - วิธีที่ต้องการ

ติดตั้งgnome-scheduleจากศูนย์ซอฟต์แวร์ Ubuntu หากคุณไม่ต้องการติดตั้งอะไรเพิ่มเติมให้ทำตามวิธีที่เทอร์มินัล

เปิดgnome-scheduleจากเส้นประสร้างงานที่ทำซ้ำใหม่และตั้งค่าตัวเลือกเหล่านี้:

  • Description: สิ่งที่คุณต้องการ
  • คำสั่ง: dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
  • เลือกX Applicationด้านล่างคำสั่ง
  • เวลาและวันที่ขั้นสูง:
    • นาที: 0,30

ปล่อยให้ตัวเลือกอื่น ๆ เป็นค่าเริ่มต้น คลิกที่เพิ่ม


The Terminal Way - ไม่จำเป็นต้องใช้ซอฟต์แวร์เพิ่มเติม

เรียกใช้จากเทอร์มินัล:

crontab -e

เพิ่มบรรทัดนี้:

0,30 * * * * DISPLAY=:0 dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot

บันทึก & ออก สมมติว่าคุณกำลังใช้nano(หนึ่งเริ่มต้น), กดCtrl + oและCtrl + x

โปรดสังเกตว่าสิ่งนี้จะไม่ทำงานหาก DISPLAY ของคุณแตกต่างจากจริง:0และนั่นคือเหตุผลที่ไม่ชอบวิธีนี้ แต่ตรงไปตรงมาถ้าคุณกำลังรีบูตเครื่องคอมพิวเตอร์ของคุณทุก 30 นาที, DISPLAY :0ของคุณจะมากที่สุดอาจจะเสมอ

ไม่ได้ใช้ Gnome หรือ Unity ใช่ไหม

ทั้งสองวิธีที่อธิบายข้างต้นขึ้นอยู่กับองค์ประกอบของคำพังเพยบางอย่างซึ่งพบได้ทั้งในช่วง Gnome และ Unity หากคุณต้องการทำสิ่งนี้ในสภาพแวดล้อมอื่น (เช่น KDE ของ Kubuntu, LXDE ของ Kubuntu ... ) คุณควรแทนที่คำสั่งด้วยอันนี้แทน:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

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


6

เรียกใช้sudo crontab -eจากบรรทัดคำสั่งและเพิ่มบรรทัดนี้ลงในไฟล์:

0,30 * * * * reboot

สิ่งนี้บอกให้ระบบรันคำสั่งrebootทุก ๆ 30 นาทีในฐานะรูท สำหรับภาพรวมของเวลาไวยากรณ์ดูที่นี่: http://linuxmoz.com/crontab-syntax-tutorial/


3
สิ่งนี้จะไม่ทำงานตามที่rebootต้องถูกเรียกใช้rootและสิ่งนี้จะเพิ่มลงใน crontab ส่วนบุคคลของผู้ใช้ดังนั้นจึงทำงานในลักษณะผู้ใช้ที่ไม่ใช่รูท (สิ่งเดียวกันกับที่sudo rebootจะไม่ทำงานเพราะsudoจะพยายามให้รหัสผ่านและล้มเหลว) /etc/crontabควรใช้สำหรับเรื่องนี้แทน (โปรดทราบว่าไวยากรณ์ของมันแตกต่างกันเล็กน้อย)
Eliah Kagan

1
คุณสามารถออกsudo crontab -eแล้วสร้างรายการ cron
Tass

-3

ใช้cronเพื่อกำหนดตารางงานทุก ๆ 30 นาที ชี้งานนั้นที่เชลล์สคริปต์ที่มี

reboot

ในนั้น.

ตั้งแต่cronทำงานเป็นรูทคุณไม่จำเป็นต้องทำอะไรเป็นพิเศษในแง่ของการอนุญาต

ปรับปรุง

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

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

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

หากคุณตั้งค่าในระบบกว้างของ crontab ทุกอย่างจะทำงานเหมือนรูทดังนั้นคำสั่งของฉันจึงถูกต้อง (ฉันแค่ละเลยที่จะพูดถึงว่าควรใช้ระบบแบบกว้าง)

สำหรับคำถามของคุณ "ทำไมห่อเป็นสคริปต์?" ทำไมล่ะ หาก OP วางไว้ในเชลล์สคริปต์ดังนั้นเมื่อถึงจุดหนึ่งในอนาคตจำเป็นต้องเพิ่มมันเขาเพียงเพิ่มสคริปต์แทนที่จะต้องเปิด crontab เพื่อค้นหางานลบออกแทนที่ด้วยเชลล์สคริปต์ จากนั้นเขียนสคริปต์ด้วยรายการเก่าและใหม่

กว่า 20 ปีในฐานะผู้ดูแลระบบ / นักพัฒนา Sys ที่ทำงานกับระบบที่ไกลที่สุดเท่าที่ Ultrix / Solaris และแม้แต่ VAX ได้สอนฉันประเด็นสำคัญข้อหนึ่ง

หากคุณสามารถทำให้มันง่ายขึ้นในตอนเริ่มต้นมันก็ยังคงง่ายสำหรับเวลาชีวิต

ฉันไม่ได้รับทัศนคติแบบ "Minimalistic" ที่ผู้ดูแลระบบยุคปัจจุบันจำนวนมากมีซึ่งการทำสิ่งที่น้อยที่สุดเป็นกุญแจสู่ความสำเร็จ เซิร์ฟเวอร์ส่วนใหญ่ในปัจจุบันนี้มีประสิทธิภาพมากกว่า + 20 เท่ามากกว่าที่ฉันเคยทำมาและสถานการณ์แบบนี้ (การตัดคำในเชลล์สคริปต์) นั้นเป็นแนวทางปฏิบัติที่แนะนำดังนั้นจึงไม่มีข้อโต้แย้งใด ๆ ที่จะไม่ทำในตอนนี้

นอกเสียจากว่าคุณต้องการที่จะฮาร์ดคอร์ Unix / Linux ซึ่งในกรณีนี้แท็กมันทั้งหมดลงในรายการ cron และท่อทุกอย่างเข้าด้วยกันอย่างที่มันควรจะทำ :-)

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

ฉันมีเซิร์ฟเวอร์ตัวเดียวในบรรดาเซิร์ฟเวอร์ที่ฉันทำงานซึ่งทุ่มเทให้ฉันเล่นไปเรื่อย ๆ ดังนั้นฉันจึงสามารถทดสอบสิ่งต่าง ๆ เช่นนี้ ... ซึ่งดีกว่า A หรือ B ดังนั้นจึงไม่มีเหตุผลใดที่ฉันจะให้คำแนะนำใด ๆ นี้.


ดูการอัปเดตของฉัน .. คุณสามารถให้ 1 คะแนนกลับมาตอนนี้ถ้าคุณต้องการ ;-)
Shawty

ลองอีกครั้ง ... อดทน
หน่อยสิ

2
นี่คือตอนนี้ไม่มีคำตอบเลย! (นอกจากนี้คุณกำลังสับสนบิตเหนียวและบิต setuid .)
Eliah Kagan

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