ฉันจะบังคับให้ปิด Mac ในเวลาที่กำหนดได้อย่างไร


19

ฉันกำลังมองหาแอปปิดเครื่องอัตโนมัติที่จะบังคับปิดคอมพิวเตอร์ตามเวลาที่กำหนด

ส่วนที่สำคัญที่สุดของสิ่งนี้คือการปิดเครื่องไม่ควรยกเลิกได้


"แอพ" หมายถึงอะไร ต้องเป็นโปรแกรม GUI หรือยอมรับ launchd (ซึ่งฉันแนะนำด้านล่าง) หรือไม่? หากคุณทำสิ่งใดกับแอพ GUI คุณต้องการให้มันทำอะไร แจ้งให้คอมพิวเตอร์ทราบว่าควรปิดเครื่องเมื่อใด
TJ Luoma

คำตอบ:


25

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

มันจะทำงานเหมือนรูทและจะถูกบังคับ

  • Open Terminal (/ Applications / Utilities / Terminal)
  • อินพุต sudo crontab -e

คุณจะต้องป้อนรหัสผ่านการเข้าสู่ระบบของคุณแล้วกด Enter

ตอนนี้คุณจะอยู่ในโปรแกรมแก้ไขข้อความ (เป็นกลุ่ม) ป้อนการกดแป้นต่อไปนี้อย่างระมัดระวัง

  • กดiหนึ่งครั้ง (สิ่งนี้จะช่วยให้คุณป้อนข้อความ)

สมมติว่าคุณต้องการให้เครื่องปิดตอนตีสองทุกวันตอนนี้เราป้อน:

* 2 * * * /sbin/shutdown -h now

หากคุณต้องการให้เครื่องปิดตอน 2:30 น. ทุกวันคุณต้องป้อน:

30 2 * * * /sbin/shutdown -h now
  • เมื่อคุณพิมพ์สิ่งนี้แล้วให้กด esc
  • จากนั้นกดshift+ z shift+ z(นั่นคือตัวพิมพ์ใหญ่ "z" สองครั้งเพื่อเขียนการเปลี่ยนแปลงและออกจากโปรแกรมแก้ไข)

ตอนนี้คุณควรจะกลับไปที่บรรทัดคำสั่งที่คุณเริ่ม

คุณทำเสร็จแล้ว!


คุณไม่จำเป็นต้องใส่ที่sudoนั่น? ฉันรู้ว่าอาจเป็นสาเหตุให้วางสาย แต่ฉันค่อนข้างแน่ใจว่าคุณต้องรูทเพื่อให้ทำงานshutdownได้
daviesgeek

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

3
@daveisgeek - คุณมีสิทธิ์โดยสิ้นเชิง แต่โปรดทราบว่าเราเริ่มต้น crontab ด้วย sudo ซึ่งหมายความว่าเรากำลังแก้ไข crontab ของรูทดังนั้นคำสั่งที่กำหนดเวลาไว้ใด ๆ จะถูกดำเนินการในฐานะผู้ใช้รายนั้น
macaco

เฮ้ฉันทำสิ่งนี้และในเวลาที่กำหนดฉันได้รับกล่องโต้ตอบที่แจ้งว่าคอมพิวเตอร์เครื่องนี้จะปิดตัวลงภายใน 10 นาที? และขอให้ฉันยกเลิก ฉันไม่รู้ว่านั่นเป็นผลของสิ่ง cron หรือสิ่งที่ประหยัดพลังงานฉันก็ทำเช่นกัน สิ่ง cron ควรจะบังคับให้ปิดโดยไม่ต้องยกเลิกการโต้ตอบหรือไม่
Harry

3
shutdownอยู่ใน/sbinซึ่งอาจไม่ได้อยู่ในการเริ่มต้น $ PATH ของ cron หากต้องการแก้ไขให้ทำsudo crontab -eสิ่งที่อีกชนิดddลบบรรทัด (สมมติดูไฟล์อย่างหนึ่งที่คุณเชื่อมโยงด้านบน) และ Reenter 30 22 * * * /sbin/shutdown -h nowสายเป็น
nohillside

13

สามารถยกเลิกได้แม้ว่า:


หยุดที่yymmddhhmm:

shutdown -h 1109211555

หยุดใน 4 นาที:

shutdown -h +4

/Library/LaunchAgents/me.lri.forceshutdown.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>me.lri.forceshutdown</string>
    <key>ProgramArguments</key>
    <array>
        <string>shutdown</string>
        <string>-h</string>
        <string>now</string>

    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>23</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

หากผู้วางแผนปกติเป็นเจ้าของโดยผู้ใช้ปกติพยายามโหลดมันจะทำให้เกิดข้อผิดพลาดlaunchctl: Dubious ownership on file (skipping):

sudo chown root /Library/LaunchAgents/me.lri.forceshutdown.plist

เอเจนต์สามารถโหลดได้โดยออกจากระบบและกลับเข้าสู่ระบบหรือด้วย:

sudo launchctl load /Library/LaunchAgents/me.lri.forceshutdown.plist

sudo crontab -e

`08 16 * * * /sbin/shutdown -h now`

สิ่งนี้จะทำการปิดระบบแบบไม่บังคับปกติ:

osascript -e 'tell app "System Events" to shut down'

เมื่อเพิ่มคำสั่ง shutdown ไปยังเอเจนต์ launchd ใน / Library / LaunchAgents / มันไม่ทำงานและ 'console' จะเข้าสู่ระบบ 'shutdown: NOT super-user' บางทีนี่อาจจะใช้งานได้ใน / ระบบ / ห้องสมุด / LaunchAgents (แต่คุณไม่ควรใส่อะไรไว้ :-)) ฉันต้องการเพียงแค่การปิดระบบตามปกติดังนั้นฉันจึงไปกับ osascript และวางไว้ใน ~ / Library / LaunchAgents /bla.shutdown.plist ทำงานได้ดี
commonpike

ฉันต้องใช้ <code> osascript -e 'บอกแอป "Finder" เพื่อปิด "</code> แม้ว่า
commonpike

นี่เป็นคำตอบที่ถูกต้องเท่านั้น (ในความคิดของฉัน)
CousinCocaine

9

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

  • คุณยังสามารถบังคับให้ปิดระบบด้วยคำสั่งเทอร์มินัล (ต้องการรูท):

    ปิดตอนนี้

    คุณสามารถใส่คำสั่งนั้นลงในงานที่กำหนดเวลาlaunchdหรือcron ลองอ่านบทความนี้เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับบริการทั้งสองนี้

  • คุณอาจต้องการตรวจสอบแอปพลิเคชันเช่นiWannaSleepชื่อ aptly (ไม่แน่ใจว่าบังคับให้ปิดระบบ)


อะไร...??? ฉันกำลังมองหาแอพ
แฮร์รี่

2
คุณอาจจะดูไม่เนรคุณน้อยลง แต่ถ้าคุณอ่านคำตอบของฉันคุณจะเห็นว่าฉันแนะนำแอพและถ้าคุณทำวิจัยเล็ก ๆ น้อย ๆ คุณจะเห็นว่ามีแอปพลิเคชั่นอีกสองสามตัวที่มีความสามารถนี้!
macaco

iWannaSleep เป็นผลลัพธ์แรกที่ผู้คนแนะนำบน google และมันไม่ได้ทำในสิ่งที่ฉันต้องการ และคุณแนะนำให้ฉันเรียนรู้สิ่งยูนิกซ์เพื่อปิดเครื่องคอมพิวเตอร์?
แฮร์รี่

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

1
ตัวประหยัดพลังงาน»กำหนดการไม่ใช่คำตอบที่ดีเพราะจะแจ้งให้ผู้ใช้ทราบ 10 นาทีก่อนปิดเครื่องและเสนอให้ยกเลิกกระบวนการ
TJ Luoma

3

คุณสามารถใช้shutdownโดยตรงเพื่อกำหนดเวลาปิดในเวลาใดก็ตามในอนาคต:

shutdown -h time

โดยที่ time ระบุเวลาในอนาคตในรูปแบบหนึ่งในสองรูปแบบ: + number หรือ yymmddhhmm โดยที่ปีเดือนและวันอาจถูกตั้งค่าเริ่มต้นเป็นค่าระบบปัจจุบัน แบบฟอร์มแรกจะทำให้ระบบลงในจำนวนนาทีและครั้งที่สองในเวลาที่ระบุ


2
cd ~/Downloads/

curl --remote-name http://dl.dropbox.com/u/18414/ase/com.tjluoma.forceshutdown.plist

# ดูหมายเหตุด้านล่าง

sudo mv com.tjluoma.forceshutdown.plist /Library/LaunchAgents

sudo chown root:wheel /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

sudo launchctl load /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

บันทึก:

ตามที่เขียนไว้โปรแกรมจะทำให้คอมพิวเตอร์ปิดเครื่องเวลา 23.00 น. (เวลาท้องถิ่น) ทุกวัน

หากคุณต้องการเปลี่ยนเวลาแก้ไขสคริปต์ในตัวแก้ไขข้อความใด ๆ เปลี่ยนปุ่มชั่วโมงและนาทีคัดลอกมาที่นี่:

<dict>
    <key>Hour</key>
    <integer>23</integer>
    <key>Minute</key>
    <integer>0</integer>
</dict>

(หมายเหตุการใช้เวลา 24 ชั่วโมง)


2

ดีกว่ากำหนดเวลาปิดเครื่อง

หากคุณต้องการได้อย่างปลอดภัยปิด Mac ของคุณในเวลาที่กำหนดไว้พิจารณาจัดการการใช้พลังงาน ; มันปิดลงอย่างสวยงามโดยไม่ให้แอปพลิเคชันบล็อกกระบวนการ:

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

มันยากมากสำหรับแอปพลิเคชันปลอมหรือกระบวนการเพื่อบล็อกขั้นตอนเหล่านี้

ทำไมจะไม่ล่ะ shutdown

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

ผู้ช่วยกำหนดการ

จัดการการใช้พลังงานรวมถึงงานที่ช่วยสำหรับกำหนดการปิดตารางเวลา

Power Manager - ปิดการทำงานประจำวัน

การเปิดเผยข้อมูล: ฉันทำงานกับ บริษัท ที่สร้าง Power Manager


0

ฉันจะดูที่บันทึกเทคโนโลยีนี้โดย Apple


ขอบคุณฉันต้องทำอะไรตอนนี้
แฮร์รี่

คุณสามารถใช้ SendAppleEventToSystemProcess (kAEShutDown) จากนั้นคุณสามารถใช้คำสั่ง killall -u ชื่อผู้ใช้เพื่อฆ่าแอพทั้งหมด (เนื่องจากคุณไม่ต้องการให้ยกเลิกได้) คุณอาจต้องการตรวจสอบคลาสจับเวลา: developer.apple.com/library/ mac / # documentary / Cocoa / Reference / …
Samantha Catania

1
บทความยอดเยี่ยม แต่ OP กำลังรบกวนการใช้ cron หรือ launchd ฉันสงสัยว่าเขากำลังมองหาวิธีแก้ไขปัญหาของเขาเอง
macaco

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