Làm cách nào tôi có thể tắt máy Mac của mình tại một thời điểm được chỉ định?


19

Tôi đang tìm kiếm một ứng dụng tự động tắt máy sẽ tắt máy tính vào một thời điểm được chỉ định.

Phần quan trọng nhất của việc này là không nên hủy bỏ (trừ khi quá trình này cực kỳ khó chịu).


"Ứng dụng" nghĩa là gì? Nó có phải là một chương trình GUI hay là launchd (mà tôi đề xuất dưới đây) có thể chấp nhận được không? Nếu bạn làm những gì một ứng dụng GUI, bạn muốn nó làm gì? Nhắc thời gian máy tính nên tắt, khi chạy?
TJ Luoma

Câu trả lời:


25

Ok, xa hơn với câu trả lời trước của tôi, tôi có thể hướng dẫn bạn cách lấy cron (một dịch vụ lịch trình UNIX tích hợp) để chạy lệnh tắt máy theo lịch trình cho bạn.

Nó sẽ chạy như root và sẽ bị ép buộc.

  • Mở Terminal (/ Ứng dụng / Tiện ích / Terminal)
  • Đầu vào sudo crontab -e

Bạn sẽ cần nhập mật khẩu đăng nhập và sau đó nhấn enter.

Bây giờ bạn sẽ ở trong một trình soạn thảo văn bản (vim). Cẩn thận nhập các tổ hợp phím sau.

  • Nhấn imột lần (điều này sẽ cho phép bạn nhập văn bản)

Giả sử bạn muốn tắt máy vào lúc 2 giờ sáng mỗi ngày, giờ chúng tôi sẽ nhập:

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

Nếu bạn muốn tắt máy lúc 2:30 sáng mỗi ngày, bạn sẽ nhập:

30 2 * * * /sbin/shutdown -h now
  • Khi bạn đã nhập cái này vào, nhấn esc
  • Sau đó nhấn shift+ z shift+ z(đó là chữ hoa "z" hai lần, để viết các thay đổi và thoát trình chỉnh sửa)

Bây giờ bạn sẽ được đưa trở lại dòng lệnh nơi bạn bắt đầu.

Bạn đã hoàn tất!


Bạn không cần phải đặt sudoở đó? Tôi biết điều đó có thể sẽ khiến nó bị treo, nhưng tôi khá chắc chắn rằng bạn phải root để chạy shutdown.
daviesgeek

Không có ngoại lệ cần thiết, đó là một câu trả lời tuyệt vời, khá vui vẻ ngạc nhiên, đặc biệt là sau khi tôi trả lời một cách thô lỗ. Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn
Harry

3
@daveisgeek - Bạn hoàn toàn đúng, nhưng lưu ý rằng chúng tôi khởi động crontab bằng sudo. Điều này có nghĩa là chúng tôi đang chỉnh sửa crontab của root và do đó, bất kỳ lệnh được lên lịch nào trong đó sẽ được thực thi với tư cách là người dùng đó.
macaco

Này, tôi đã làm điều này, và tại thời điểm được chỉ định, tôi nhận được một hộp thoại cho biết, máy tính này sẽ tắt sau 10 phút? Và nó yêu cầu tôi hủy bỏ. Tôi không biết đó là kết quả của điều cron hay điều tiết kiệm năng lượng mà tôi cũng đã làm. Là thứ cron có nghĩa vụ buộc phải tắt máy mà không có hộp thoại hủy?
Harry

3
shutdowntrong /sbinđó có lẽ không có trong $ PATH mặc định của cron. Để khắc phục, hãy thực hiện sudo crontab -elại, nhập ddđể xóa dòng (giả sử tệp trông giống như tệp bạn đã liên kết ở trên) và nhập lại dòng dưới dạng 30 22 * * * /sbin/shutdown -h now.
nohillside

13

Nó có thể bị hủy mặc dù:


Dừng lại tại yymmddhhmm:

shutdown -h 1109211555

Dừng lại sau 4 phút:

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>

Nếu số nguyên được sở hữu bởi một người dùng bình thường, cố gắng tải nó sẽ dẫn đến lỗi launchctl: Dubious ownership on file (skipping):

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

Tác nhân có thể được tải bằng cách đăng xuất và đăng nhập lại hoặc bằng:

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

sudo crontab -e

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

Điều này sẽ thực hiện tắt máy không bắt buộc bình thường:

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

Khi thêm lệnh tắt máy vào tác nhân launchd trong / Library / LaunchAgents /, nó không hoạt động và 'console' sẽ đăng nhập 'shutdown: KHÔNG phải siêu người dùng'. Có lẽ điều này sẽ hoạt động trong / System / Library / LaunchAgents (nhưng bạn không cần phải đặt công cụ ở đó :-)) Tôi chỉ cần tắt máy bình thường, vì vậy tôi đã sử dụng osascript và đặt nó vào ~ / Library / LaunchAgents /bla.shutdown.plist. Làm việc tốt
phổ biến

Tôi đã phải sử dụng <code> osascript -e 'nói với ứng dụng "Finder" để tắt' </ code> mặc dù vậy
thường

Đây là câu trả lời đúng duy nhất. (theo ý kiến ​​của tôi)
CousinCocaine

9

Điều này có thể được lên lịch trong Tùy chọn hệ thống> Tiết kiệm năng lượng> Lịch biểu . Tôi không chắc chắn rằng điều này sẽ bắt đầu tắt máy bắt buộc, bạn phải thử. Nhưng đó là một tùy chọn tích hợp để tự động tắt / lên nguồn theo lịch trình.

  • Bạn cũng có thể buộc tắt hệ thống bằng lệnh terminal (yêu cầu root):

    tắt máy -h ngay

    Bạn có thể đặt lệnh đó vào một tác vụ theo lịch trình launchd hoặc cron . Kiểm tra bài viết này để biết thêm thông tin về hai dịch vụ.

  • Bạn cũng có thể muốn kiểm tra một ứng dụng như iWannaS ngủ có tên thích hợp (không chắc chắn nếu điều này buộc phải tắt máy).


Gì...??? Tôi đang tìm kiếm một ứng dụng.
Harry

2
Bạn có thể muốn tỏ ra ít vô ơn hơn, nhưng nếu bạn đọc lại câu trả lời của tôi, bạn sẽ thấy rằng tôi đề xuất một ứng dụng và nếu bạn thực hiện một nghiên cứu độc lập nhỏ, bạn sẽ thấy rằng thực sự có thêm một vài ứng dụng có khả năng này!
macaco

iWannaS ngủ là kết quả đầu tiên mà mọi người đề xuất trên google và nó không làm những gì tôi muốn. Và bạn đang khuyên tôi tìm hiểu một số điều unix để tắt máy tính?
Harry

3
Tôi khuyên bạn nên làm điều đó bởi vì đây là một cách hiệu quả để đạt được những gì bạn muốn bằng cách sử dụng các công cụ tích hợp. Nếu bạn không thể tìm thấy một ứng dụng phù hợp với nhu cầu của bạn thì bạn có thể cần phải tìm một cái gì đó dọc theo dòng gợi ý của tôi.
macaco

1
Tiết kiệm năng lượng »Lịch trình không phải là một câu trả lời hay, bởi vì nó sẽ nhắc người dùng 10 phút trước khi tắt máy và đề nghị hủy quy trình.
TJ Luoma

3

Bạn có thể sử dụng shutdowntrực tiếp để lên lịch tắt máy tại bất kỳ thời điểm nào trong tương lai:

shutdown -h time

trong đó thời gian chỉ định thời gian trong tương lai theo một trong hai định dạng: + number hoặc yymmddhhmm, trong đó năm, tháng và ngày có thể được mặc định cho các giá trị hệ thống hiện tại. Biểu mẫu đầu tiên đưa hệ thống xuống theo số phút và lần thứ hai tại thời điểm tuyệt đối được chỉ định.


2
cd ~/Downloads/

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

# xem ghi chú bên dưới

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

Ghi chú:

Như đã viết, plist sẽ khiến máy tính bị tắt vào lúc 11 giờ tối (giờ địa phương) mỗi ngày.

Nếu bạn muốn thay đổi thời gian, hãy chỉnh sửa tập lệnh trong bất kỳ trình soạn thảo văn bản nào. Thay đổi các phím Giờ và Phút, được trích dẫn ở đây:

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

(lưu ý sử dụng thời gian 24 giờ)


2

Nicer đã lên lịch tắt

Nếu bạn muốn tắt máy Mac một cách an toàn theo thời gian đã lên lịch, hãy xem xét Power Manager ; nó tắt độc đáo mà không để các ứng dụng chặn quá trình:

  • Tất cả người dùng hoạt động được cung cấp thông báo rộng rãi.
  • Một cảnh báo lớn được hiển thị ngay trước khi tắt máy bắt đầu.
  • Các ứng dụng đang chạy được yêu cầu thoát ra.
  • Các ứng dụng bỏ qua các yêu cầu tốt đẹp được bỏ chắc chắn hơn.
  • Đăng xuất là trái để hoàn thành, trước khi Mac cuối cùng đã tắt.

Rất khó để một ứng dụng hoặc quy trình giả mạo chặn các bước này.

Tại sao không shutdown

Việc sử dụng shutdownsẽ buộc thoát khỏi tất cả các quy trình trên máy Mac của bạn, bao gồm cả các ứng dụng đồ họa. Đối với nhiều ứng dụng, đây là hành vi gây hấn và không cung cấp cho ứng dụng nhiều cơ hội để lưu trạng thái hoặc dữ liệu.

Trợ lý lịch trình

Power Manager bao gồm một nhiệm vụ Trợ lý lịch biểu để tắt lịch trình .

Power Manager - tắt nguồn công việc hàng ngày

Tiết lộ: Tôi làm việc với công ty làm Power Manager.


0

Tôi sẽ xem qua ghi chú công nghệ này của Apple


Cảm ơn, tôi phải làm gì bây giờ?
Harry

bạn có thể sử dụng SendAppleEventToSystemProcess (kAEShutDown) sau đó bạn có thể sử dụng lệnh killall -u tên người dùng để hủy tất cả các ứng dụng (vì bạn không muốn hủy nó), bạn cũng có thể muốn kiểm tra lớp hẹn giờ: developer.apple.com/l Library / mac / # tài liệu / ca cao / tài liệu tham khảo / từ
Samantha Catania

1
Bài viết tuyệt vời, nhưng OP đã chùn bước về việc sử dụng cron hoặc launchd, tôi nghi ngờ anh ta đang tìm cách viết mã giải pháp của riêng mình cho vấn đề này.
macaco

1
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
daviesgeek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.