ฉันต้องการกำหนดการรีสตาร์ท Ubuntu ของฉันทุก ๆ 30 นาที มีคำสั่งหรือวิธีการแบบกราฟิกที่จะทำมันได้หรือไม่
ฉันต้องการกำหนดการรีสตาร์ท Ubuntu ของฉันทุก ๆ 30 นาที มีคำสั่งหรือวิธีการแบบกราฟิกที่จะทำมันได้หรือไม่
คำตอบ:
วิธีที่ดีที่สุดในการทำเช่นนี้ขึ้นอยู่กับสาเหตุที่คุณต้องการให้ Ubuntu เริ่มการทำงานใหม่ทุกครึ่งชั่วโมง
ดังนั้นฉันขอแนะนำให้แก้ไขคำถามของคุณเพื่ออธิบายว่าทำไมคุณต้องการทำเช่นนี้
สมมติว่าผู้คนกำลังใช้งานเครื่องอยู่ไม่ว่าจะอยู่ในท้องถิ่นหรือจากระยะไกลขอแนะนำให้หลีกเลี่ยงการเริ่ม Ubuntu ใหม่จากข้างใต้โดยไม่มีการเตือนใด ๆ ดังนั้นแทนที่จะตั้งเวลาreboot
คำสั่งฉันแนะนำให้ตั้งเวลาshutdown
คำสั่งเพื่อเตือนผู้ใช้
หากต้องการกำหนดเวลาปิดเครื่องทุกครึ่งชั่วโมงโดยมีคำเตือน 5 นาทีก่อนหน้าให้เพิ่มสิ่งนี้ใน/etc/crontab
:
#minute hour mday month wday user command
*/30 * * * * root shutdown -r +5
คุณไม่จำเป็นต้องเพิ่มบรรทัดกำปั้นซึ่งเป็นความคิดเห็น ฉันได้รวมมันไว้เพื่อความกระจ่างแล้ว - บางอย่างที่มันมีอยู่แล้ว
-r
) ห้านาทีหลังจาก ( +5
) คำสั่งรัน มันทำงานทุก ๆ ที่เครื่องหมายครึ่งชั่วโมง ( */30
) ดูและman cron
man 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/noautoreboot
shutdown -r +5
คำตอบนี้อธิบายวิธีลัดวงจรและและหรือผู้ปฏิบัติงานสามารถif
- then
ตรรกะ สำหรับคำอธิบายสั้น ๆ ที่ใช้งานง่ายและไม่เป็นทางการคุณสามารถอ่านคำสั่งด้วยวิธีนี้:
/etc/noautoreboot
มีอยู่!shutdown -r +5
หรือเรียกใช้
ดูman [
เพื่อดูว่าการทดสอบดำเนินการอย่างไร
ฉันชอบทำสิ่งนี้โดยบอก Session Manager ว่าเราต้องการรีบูต สิ่งนี้สามารถทำได้โดยไม่ต้องใช้สิทธิ์รูทและเราได้หน้าต่างที่ดีที่เตือนเราว่าระบบจะทำการรีบูท -even เราสามารถยกเลิกการรีบู๊ตได้หากเราต้องการ
ติดตั้งgnome-schedule
จากศูนย์ซอฟต์แวร์ Ubuntu หากคุณไม่ต้องการติดตั้งอะไรเพิ่มเติมให้ทำตามวิธีที่เทอร์มินัล
เปิดgnome-schedule
จากเส้นประสร้างงานที่ทำซ้ำใหม่และตั้งค่าตัวเลือกเหล่านี้:
dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
ปล่อยให้ตัวเลือกอื่น ๆ เป็นค่าเริ่มต้น คลิกที่เพิ่ม
เรียกใช้จากเทอร์มินัล:
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 หากคุณต้องการทำสิ่งนี้ในสภาพแวดล้อมอื่น (เช่น KDE ของ Kubuntu, LXDE ของ Kubuntu ... ) คุณควรแทนที่คำสั่งด้วยอันนี้แทน:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
สิ่งนี้จะไม่ขอการยืนยันและจะเริ่มต้นใหม่ในระดับกลาง แต่จะทำงานได้ในทุกสภาวะสมมติว่าคุณยังไม่ได้ถอนการติดตั้ง ConsoleKit ด้วยตนเอง
เรียกใช้sudo crontab -e
จากบรรทัดคำสั่งและเพิ่มบรรทัดนี้ลงในไฟล์:
0,30 * * * * reboot
สิ่งนี้บอกให้ระบบรันคำสั่งreboot
ทุก ๆ 30 นาทีในฐานะรูท สำหรับภาพรวมของเวลาไวยากรณ์ดูที่นี่: http://linuxmoz.com/crontab-syntax-tutorial/
reboot
ต้องถูกเรียกใช้root
และสิ่งนี้จะเพิ่มลงใน crontab ส่วนบุคคลของผู้ใช้ดังนั้นจึงทำงานในลักษณะผู้ใช้ที่ไม่ใช่รูท (สิ่งเดียวกันกับที่sudo reboot
จะไม่ทำงานเพราะsudo
จะพยายามให้รหัสผ่านและล้มเหลว) /etc/crontab
ควรใช้สำหรับเรื่องนี้แทน (โปรดทราบว่าไวยากรณ์ของมันแตกต่างกันเล็กน้อย)
sudo crontab -e
แล้วสร้างรายการ cron
ใช้cron
เพื่อกำหนดตารางงานทุก ๆ 30 นาที ชี้งานนั้นที่เชลล์สคริปต์ที่มี
reboot
ในนั้น.
ตั้งแต่cron
ทำงานเป็นรูทคุณไม่จำเป็นต้องทำอะไรเป็นพิเศษในแง่ของการอนุญาต
ใช่ฉันทำจริง ๆ แล้วฉันไม่เคยอยู่ในระบบใด ๆ ที่อนุญาตให้ใช้ crontabs ของผู้ใช้ (มีวิธีที่ดีกว่าในการอนุญาตให้ผู้ใช้ทำงานตามตารางเวลาของผู้ใช้) cron ได้รับการออกแบบมาตั้งแต่แรกเริ่มเพื่อระบบอัตโนมัติเท่านั้น งาน สิ่งต่าง ๆ เช่นการหมุนเวียนของบันทึก (ซึ่งยังคงเกิดขึ้นในวันนี้)
การเริ่มระบบใหม่จะต้องทำงานเป็นรูทเพื่อทำงานอย่างถูกต้องทางเลือกคือการตั้งค่าเป็นบิตที่เหนียวดังนั้นเมื่อเรียกใช้ในฐานะผู้ใช้ทั่วไประบบจะเรียกใช้งานรูทและทำงานตามที่คาดไว้ แต่ในการเปิดเซิร์ฟเวอร์ของคุณ ผู้ใช้สามารถรีบูทได้ตามต้องการ
คุณอาจจะทำการโทรไปยัง SUDO ได้โดยอัตโนมัติ แต่ฉันต้องขุดลงไปในนั้นไม่แน่ใจว่าคุณสามารถทำรหัสผ่านด้วย SUDO โดยอัตโนมัติได้หรือไม่ (ฉันไม่ได้ใช้บ่อยครั้งฉันชอบที่จะส่งไปที่รูทโดยตรง เชลล์ใช้ SU)
หากคุณตั้งค่าในระบบกว้างของ crontab ทุกอย่างจะทำงานเหมือนรูทดังนั้นคำสั่งของฉันจึงถูกต้อง (ฉันแค่ละเลยที่จะพูดถึงว่าควรใช้ระบบแบบกว้าง)
สำหรับคำถามของคุณ "ทำไมห่อเป็นสคริปต์?" ทำไมล่ะ หาก OP วางไว้ในเชลล์สคริปต์ดังนั้นเมื่อถึงจุดหนึ่งในอนาคตจำเป็นต้องเพิ่มมันเขาเพียงเพิ่มสคริปต์แทนที่จะต้องเปิด crontab เพื่อค้นหางานลบออกแทนที่ด้วยเชลล์สคริปต์ จากนั้นเขียนสคริปต์ด้วยรายการเก่าและใหม่
กว่า 20 ปีในฐานะผู้ดูแลระบบ / นักพัฒนา Sys ที่ทำงานกับระบบที่ไกลที่สุดเท่าที่ Ultrix / Solaris และแม้แต่ VAX ได้สอนฉันประเด็นสำคัญข้อหนึ่ง
หากคุณสามารถทำให้มันง่ายขึ้นในตอนเริ่มต้นมันก็ยังคงง่ายสำหรับเวลาชีวิต
ฉันไม่ได้รับทัศนคติแบบ "Minimalistic" ที่ผู้ดูแลระบบยุคปัจจุบันจำนวนมากมีซึ่งการทำสิ่งที่น้อยที่สุดเป็นกุญแจสู่ความสำเร็จ เซิร์ฟเวอร์ส่วนใหญ่ในปัจจุบันนี้มีประสิทธิภาพมากกว่า + 20 เท่ามากกว่าที่ฉันเคยทำมาและสถานการณ์แบบนี้ (การตัดคำในเชลล์สคริปต์) นั้นเป็นแนวทางปฏิบัติที่แนะนำดังนั้นจึงไม่มีข้อโต้แย้งใด ๆ ที่จะไม่ทำในตอนนี้
นอกเสียจากว่าคุณต้องการที่จะฮาร์ดคอร์ Unix / Linux ซึ่งในกรณีนี้แท็กมันทั้งหมดลงในรายการ cron และท่อทุกอย่างเข้าด้วยกันอย่างที่มันควรจะทำ :-)
อย่างไรก็ตามฉันพูดนอกเรื่องและยังเข้าใจว่าผู้ชายหลายคนในทุกวันนี้ถูกโยนลงไปที่ปลายลึกและบอกให้ทำสิ่งต่าง ๆ ทำงานเช่นพวกเขาไม่มีเวลา (และมักจะชอบ) ที่จะนั่งลงและเรียนรู้เกี่ยวกับเทคนิคใหม่ (หรือ เก่าในกรณีนี้) หรือแม้แต่ต้องการเล่นกับสิ่งนี้นอกเวลางาน
ฉันมีเซิร์ฟเวอร์ตัวเดียวในบรรดาเซิร์ฟเวอร์ที่ฉันทำงานซึ่งทุ่มเทให้ฉันเล่นไปเรื่อย ๆ ดังนั้นฉันจึงสามารถทดสอบสิ่งต่าง ๆ เช่นนี้ ... ซึ่งดีกว่า A หรือ B ดังนั้นจึงไม่มีเหตุผลใดที่ฉันจะให้คำแนะนำใด ๆ นี้.