Как я могу принудительно закрыть мой Mac в назначенное время?

19

Я ищу приложение автоматического выключения, которое принудительно выключит компьютер в назначенное время.

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

Гарри
источник
Что вы подразумеваете под "приложение"? Это должна быть программа с графическим интерфейсом или она запускается (что я предлагаю ниже) приемлемо? Если вы делаете то, что приложение с графическим интерфейсом, что вы хотите, чтобы оно делало? Подскажите время, когда компьютер должен быть выключен, при запуске?
TJ Luoma

Ответы:

25

Итак, в дополнение к моему предыдущему ответу, я могу показать вам, как cron (встроенная служба расписания UNIX) запускает для вас запланированную команду завершения работы.

Он будет работать как root и будет принудительно установлен.

  • Открытый терминал (/ Приложения / Утилиты / Терминал)
  • вход sudo crontab -e

Вам нужно будет ввести свой пароль для входа и затем нажать клавишу ввода.

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

  • Нажмите iодин раз (это позволит вам ввести текст)

Допустим, вы хотите, чтобы машина выключалась каждый день в 2 часа ночи, теперь мы вводим:

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

Если вы хотите, чтобы аппарат выключался каждый день в 2:30, введите:

30 2 * * * /sbin/shutdown -h now
  • Когда вы ввели это, нажмите esc
  • Затем нажмите shift+ z shift+ z(это дважды прописная буква «z», чтобы записать изменения и выйти из редактора)

Теперь вы должны вернуться в командную строку, где вы начали.

Вы сделали!

макака
источник
Вам не нужно ставить sudoтам? Я знаю, что это, вероятно, приведет к зависанию, но я уверен, что для запуска вам нужно быть пользователем root shutdown.
Дэвисгик
Никаких исключений не требуется, это удивительный ответ, довольно приятно удивленный, особенно после того, как я ответил на ваш грубый ответ. Большое спасибо за вашу помощь
Гарри
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>

Если 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'
LRI
источник
При добавлении команды выключения к агенту launchd в / Library / LaunchAgents / это не сработало, и «console» выдаст сообщение «shutdown: NOT super-user». Возможно, это сработало бы в / System / Library / LaunchAgents (но вы не должны помещать туда вещи :-)) Мне нужно было только нормальное завершение работы, поэтому я пошел с osascript и поместил его в ~ / Library / LaunchAgents /bla.shutdown.plist. Работал нормально.
commonpike
Мне пришлось использовать <code> osascript -e 'сказать приложению "Finder", чтобы закрыть' </ code>, хотя
commonpike
Это единственный правильный ответ. (по моему мнению)
двоюродный брат Кокаин
9

Это можно запланировать в Системных настройках> Экономия энергии> Расписание . Я не уверен, что это приведет к принудительному отключению, вам придется попробовать это. Но это встроенная опция для автоматизации запланированного выключения / включения.

  • Вы также можете принудительно завершить работу системы с помощью команды терминала (требуется root):

    выключение -h сейчас

    Вы можете поместить эту команду в запланированную задачу launchd или cron . Проверьте эту статью для гораздо большей информации об этих двух службах.

  • Вы также можете проверить приложение , как метко назвал iWannaSleep (не уверен , если это силы отключения).

макака
источник
Какая...??? Я ищу приложение.
Гарри
2
Возможно, вы захотите казаться менее неблагодарным, но если вы перечитаете мой ответ, вы увидите, что я рекомендую приложение, и если вы проведете небольшое независимое исследование, вы увидите, что на самом деле есть еще несколько приложений, которые имеют такую ​​возможность!
Макако
iWannaSleep - это первый результат, который люди рекомендуют в Google, и он не делает то, что я хочу. И вы рекомендуете мне узнать что-нибудь из Unix, чтобы выключить компьютер?
Гарри
3
Я рекомендую это, потому что это эффективный способ достичь того, что вы хотите, используя встроенные инструменты. Если вы не можете найти приложение, которое соответствует вашим потребностям, вам, возможно, придется поискать что-то в соответствии с моим предложением.
Макако
1
Энергосбережение »График не является хорошим ответом, потому что он предложит пользователю за 10 минут до выключения и предложит отменить процесс.
TJ Luoma
3

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

shutdown -h time

где время указывает будущее время в одном из двух форматов: + число или гггддччмм, где год, месяц и день могут быть по умолчанию установлены на текущие системные значения. Первая форма выводит систему из строя в количестве минут, а вторая - в указанное абсолютное время.

Nohillside
источник
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

Замечания:

Как написано, plist приведет к выключению компьютера в 23:00 (по местному времени) каждый день.

Если вы хотите изменить время, отредактируйте скрипт в любом текстовом редакторе. Измените ключи Часа и Минуты, выдержки здесь:

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

(обратите внимание на использование 24-часового времени)

Ти Джей Луома
источник
2

Хорошее запланированное отключение

Если вы хотите безопасно завершить работу Mac в назначенное время, подумайте о Power Manager ; он красиво выключается, не позволяя приложениям блокировать процесс:

  • Все активные пользователи получают достаточно уведомлений.
  • Большое предупреждение отображается незадолго до начала выключения.
  • Работающие приложения просят приятно выйти.
  • Приложения, игнорирующие симпатичный запрос, более жестко закрываются.
  • Выйти из системы осталось до завершения, прежде чем Mac будет окончательно выключен.

Мошенническому приложению или процессу очень трудно заблокировать эти шаги.

Почему нет shutdown

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

Помощник по расписанию

Power Manager включает в себя задачу Schedule Assistant для выключения по расписанию .

Power Manager - ежедневное отключение питания

Раскрытие информации: я работаю с компанией, которая делает Power Manager.

Грэм Милн
источник
0

Я бы посмотрел на эту техническую заметку от Apple

Саманта Катания
источник
Спасибо, что мне теперь делать?
Гарри
вы можете использовать SendAppleEventToSystemProcess (kAEShutDown), затем вы можете использовать команду killall -u username, чтобы убить все приложения (так как вы не хотите, чтобы его можно было отменить), вы также можете проверить класс таймера: developer.apple.com/library/ mac / # документация / Какао / Справочник /…
Саманта Катания
1
Отличная статья, но OP возражал против использования cron или launchd, я сомневаюсь, что он пытается написать собственное решение этой проблемы.
Макако
1
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
daviesgeek