Як я можу насильно вимкнути свій Mac в призначений час?


19

Я шукаю додаток для автоматичного відключення, яке примусово вимкне комп'ютер у призначений час.

Найважливіша частина цього полягає в тому, що відключення не слід скасовувати (якщо тільки процес не є надзвичайно обтяжливим).


Що ви маєте на увазі під "додатком"? Чи має бути програма GUI або прийнятна (що я пропоную нижче) прийнятною? Якщо ви робите те, що додаток для графічного інтерфейсу, що ви хочете робити? Підкажіть час, коли комп'ютер повинен бути відключений, коли він працює?
TJ Luoma

Відповіді:


25

Гаразд, тому до моєї попередньої відповіді я можу провести вас через отримання cron (вбудована послуга розкладу UNIX), щоб запустити планову команду відключення для вас.

Він запуститься як root і буде вимушений.

  • Відкритий термінал (/ Програми / Утиліти / Термінал)
  • Вхідні дані sudo crontab -e

Вам потрібно буде ввести пароль для входу, а потім натиснути клавішу Enter.

Тепер ви будете в текстовому редакторі (vim). Уважно введіть наступні натискання клавіш.

  • Натисніть iодин раз (це дозволить ввести текст)

Скажімо, ви хочете, щоб машина вимикалася щодня о 2 годині ночі, ми зараз входимо:

* 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 root, і тому будь-які заплановані команди всередині буде виконано як цей користувач.
макако

Гей, я це зробив, і в призначений час у мене з’явилося діалогове вікно, яке говорить, що цей комп’ютер вимкнеться за 10 хвилин? І просить мене скасувати. Я не знаю, чи це було результатом того, що було зроблено з кроном, або з енергозбереженням, що я також робив. Чи повинно вирішити питання про cron змушення відключення без діалогу скасування?
Гаррі

3
shutdownє, у /sbinякому, ймовірно, немає за замовчуванням $ PATH cron. Щоб виправити, зробіть sudo crontab -eце ще раз, введіть ddдля видалення рядка (припустимо, що файл виглядає як той, який ви зв'язали вище) та введіть рядок як 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'

Коли ви додаєте команду завершення до агента запуску в / Бібліотека / LaunchAgents /, вона не працювала, а "консоль" записує "завершення роботи: НЕ суперкористувач". Можливо, це працювало б у / Система / Бібліотека / LaunchAgents (але ви не повинні там поміщати речі :-)) Мені потрібне було лише нормальне відключення, тому я пішов з osascript і помістив його в ~ / Бібліотека / LaunchAgents /bla.shutdown.plist. Працював чудово.
commonpike

Мені довелося скористатися <code> osascript -e 'сказати додатку "Finder", щоб вимкнути "</code> хоч
commonpike

Це єдина правильна відповідь. (на мій погляд)
CousinCocaine

9

Це можна запланувати в Налаштуваннях системи> Енергозбереження> Розклад . Я не впевнений, що це ініціює вимушене вимкнення, вам доведеться його спробувати. Але це вбудований варіант для автоматизації запланованого відключення / ввімкнення живлення.

  • Ви також можете примусово відключити систему за допомогою термінальної команди (вимагає root):

    відключення -h зараз

    Ви можете помістити цю команду в запуск програм або хрон заплановане завдання. Перегляньте цю статтю, щоб дізнатися більше про ці дві послуги.

  • Ви також можете перевірити таку програму, як влучно названий iWannaSleep (не впевнений, чи це примушує відключення).


Що...??? Я шукаю додаток.
Гаррі

2
Можливо, ви хочете здатися менш вдячним, але якщо перечитаєте мою відповідь, ви побачите, що я рекомендую додаток, і якщо ви зробите невелике незалежне дослідження, ви побачите, що насправді є ще кілька додатків, які мають цю здатність!
macaco

iWannaSleep - це перший результат, який люди рекомендують в google, і він не робить те, що я хочу. І ти рекомендуєш мені навчитися щось unix, щоб вимкнути комп’ютер?
Гаррі

3
Я рекомендую це, оскільки це ефективний спосіб досягти того, що ви хочете, використовуючи вбудовані інструменти. Якщо ви не в змозі знайти додаток, який відповідає вашим потребам, вам може знадобитися придивитися до чогось, що відповідає моїй пропозиції.
макако

1
Енергозбереження »Розклад не є гарною відповіддю, оскільки він підкаже користувача за 10 хвилин до відключення та запропонує скасувати процес.
TJ Luoma

3

Ви можете shutdownбезпосередньо використовувати для планування відключення в будь-який час у майбутньому:

shutdown -h time

де час визначає майбутній час в одному з двох форматів: + число, або 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

Примітка:

Як написано, список може спричинити вимикання комп'ютера о 11 годині (за місцевим часом) щодня.

Якщо ви хочете змінити час, відредагуйте сценарій у будь-якому текстовому редакторі. Змініть клавіші Година і Хвилина, наведені тут:

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

(зверніть увагу на використання цілодобового часу)


2

Приємніше запланованого вимкнення

Якщо ви хочете безпечно вимкнути свій Mac в запланований час, врахуйте Power Manager ; він прекрасно вимикається, не дозволяючи програмам блокувати процес:

  • Усі активні користувачі отримують достатнє повідомлення.
  • Велике попередження відображається незадовго до початку вимкнення.
  • Запущені програми просять прекрасно вийти.
  • Програми, що ігнорують приємний запит, міцніше закривають.
  • Вихід залишається завершеним, перш ніж Mac остаточно вимкнеться.

Для шахрайської програми або процесу дуже важко заблокувати ці кроки.

Чому ні shutdown

Використання shutdownзмусить вийти з усіх процесів на вашому Mac, включаючи графічні програми. Для багатьох програм це агресивна поведінка і не дає додатку багато можливостей для збереження стану або даних.

Асистент з розкладу

Power Manager включає завдання Assistant Schedule Assistant для вимкнення розкладу .

Power Manager - вимкнення щоденного завдання

Розкриття інформації: Я працюю з компанією, яка робить Power Manager.


0

Я поглянув би на цю технічну записку від Apple


Спасибі, що я зараз роблю?
Гаррі

ви можете використовувати SendAppleEventToSystemProcess (kAEShutDown), тоді ви можете використовувати команду ім'я користувача killall -u, щоб знищити всі програми (оскільки ви не хочете, щоб їх можна було скасувати), ви також можете перевірити клас таймера: developer.apple.com/library/ mac / # документація / какао / довідка /…
Samantha Catania,

1
Чудова стаття, але ОП намагався використати cron або startd, я сумніваюся, що він намагається зашифрувати власне рішення цієї проблеми.
макако

1
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
daviesgeek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.