Что вы подразумеваете под "приложение"? Это должна быть программа с графическим интерфейсом или она запускается (что я предлагаю ниже) приемлемо? Если вы делаете то, что приложение с графическим интерфейсом, что вы хотите, чтобы оно делало? Подскажите время, когда компьютер должен быть выключен, при запуске?
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+ zshift+ 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.
При добавлении команды выключения к агенту 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 (не уверен , если это силы отключения).
Возможно, вы захотите казаться менее неблагодарным, но если вы перечитаете мой ответ, вы увидите, что я рекомендую приложение, и если вы проведете небольшое независимое исследование, вы увидите, что на самом деле есть еще несколько приложений, которые имеют такую возможность!
Макако
iWannaSleep - это первый результат, который люди рекомендуют в Google, и он не делает то, что я хочу. И вы рекомендуете мне узнать что-нибудь из Unix, чтобы выключить компьютер?
Гарри
3
Я рекомендую это, потому что это эффективный способ достичь того, что вы хотите, используя встроенные инструменты. Если вы не можете найти приложение, которое соответствует вашим потребностям, вам, возможно, придется поискать что-то в соответствии с моим предложением.
Макако
1
Энергосбережение »График не является хорошим ответом, потому что он предложит пользователю за 10 минут до выключения и предложит отменить процесс.
TJ Luoma
3
Вы можете использовать shutdownнепосредственно, чтобы запланировать выключение в любое время в будущем:
shutdown -h time
где время указывает будущее время в одном из двух форматов: + число или гггддччмм, где год, месяц и день могут быть по умолчанию установлены на текущие системные значения. Первая форма выводит систему из строя в количестве минут, а вторая - в указанное абсолютное время.
Все активные пользователи получают достаточно уведомлений.
Большое предупреждение отображается незадолго до начала выключения.
Работающие приложения просят приятно выйти.
Приложения, игнорирующие симпатичный запрос, более жестко закрываются.
Выйти из системы осталось до завершения, прежде чем Mac будет окончательно выключен.
Мошенническому приложению или процессу очень трудно заблокировать эти шаги.
Почему нет shutdown
Использование shutdownпринудительно завершит все процессы на вашем Mac, включая графические приложения. Для многих приложений это агрессивное поведение и не дает приложению много возможностей для сохранения состояния или данных.
вы можете использовать SendAppleEventToSystemProcess (kAEShutDown), затем вы можете использовать команду killall -u username, чтобы убить все приложения (так как вы не хотите, чтобы его можно было отменить), вы также можете проверить класс таймера: developer.apple.com/library/ mac / # документация / Какао / Справочник /…
Саманта Катания
1
Отличная статья, но OP возражал против использования cron или launchd, я сомневаюсь, что он пытается написать собственное решение этой проблемы.
Макако
1
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Ответы:
Итак, в дополнение к моему предыдущему ответу, я могу показать вам, как cron (встроенная служба расписания UNIX) запускает для вас запланированную команду завершения работы.
Он будет работать как root и будет принудительно установлен.
sudo crontab -e
Вам нужно будет ввести свой пароль для входа и затем нажать клавишу ввода.
Теперь вы будете в текстовом редакторе (vim). Тщательно введите следующие нажатия клавиш.
Допустим, вы хотите, чтобы машина выключалась каждый день в 2 часа ночи, теперь мы вводим:
Если вы хотите, чтобы аппарат выключался каждый день в 2:30, введите:
Теперь вы должны вернуться в командную строку, где вы начали.
Вы сделали!
источник
sudo
там? Я знаю, что это, вероятно, приведет к зависанию, но я уверен, что для запуска вам нужно быть пользователем rootshutdown
.shutdown
находится в/sbin
котором, вероятно, нет в $ PATH по умолчанию cron. Чтобы исправить, сделайтеsudo crontab -e
это снова, напечатайте,dd
чтобы удалить строку (при условии, что файл похож на тот, который вы связали выше), и снова введите строку как30 22 * * * /sbin/shutdown -h now
.Это может быть отменено, хотя:
Остановка в
yymmddhhmm
:Остановка через 4 минуты:
/Library/LaunchAgents/me.lri.forceshutdown.plist
:Если plist принадлежит обычному пользователю, попытка загрузить его приведет к ошибке
launchctl: Dubious ownership on file (skipping)
:Агент можно загрузить, выйдя из системы и вернувшись в нее, или с помощью:
sudo crontab -e
Это будет выполнять обычное принудительное отключение:
источник
Это можно запланировать в Системных настройках> Экономия энергии> Расписание . Я не уверен, что это приведет к принудительному отключению, вам придется попробовать это. Но это встроенная опция для автоматизации запланированного выключения / включения.
Вы также можете принудительно завершить работу системы с помощью команды терминала (требуется root):
выключение -h сейчас
Вы можете поместить эту команду в запланированную задачу launchd или cron . Проверьте эту статью для гораздо большей информации об этих двух службах.
Вы также можете проверить приложение , как метко назвал iWannaSleep (не уверен , если это силы отключения).
источник
Вы можете использовать
shutdown
непосредственно, чтобы запланировать выключение в любое время в будущем:где время указывает будущее время в одном из двух форматов: + число или гггддччмм, где год, месяц и день могут быть по умолчанию установлены на текущие системные значения. Первая форма выводит систему из строя в количестве минут, а вторая - в указанное абсолютное время.
источник
# см. примечание ниже
Замечания:
Как написано, plist приведет к выключению компьютера в 23:00 (по местному времени) каждый день.
Если вы хотите изменить время, отредактируйте скрипт в любом текстовом редакторе. Измените ключи Часа и Минуты, выдержки здесь:
(обратите внимание на использование 24-часового времени)
источник
Хорошее запланированное отключение
Если вы хотите безопасно завершить работу Mac в назначенное время, подумайте о Power Manager ; он красиво выключается, не позволяя приложениям блокировать процесс:
Мошенническому приложению или процессу очень трудно заблокировать эти шаги.
Почему нет
shutdown
Использование
shutdown
принудительно завершит все процессы на вашем Mac, включая графические приложения. Для многих приложений это агрессивное поведение и не дает приложению много возможностей для сохранения состояния или данных.Помощник по расписанию
Power Manager включает в себя задачу Schedule Assistant для выключения по расписанию .
Раскрытие информации: я работаю с компанией, которая делает Power Manager.
источник
Я бы посмотрел на эту техническую заметку от Apple
источник