Как запретить Mac спать из командной строки?

12

У меня есть длинный скрипт на удаленном компьютере.

Я не хочу завершать сеанс SSH, и мне нужно ввести его в сценарий оболочки.

Как можно предотвратить мой Mac от засыпания из командной строки?

kobame
источник
3
Какая версия OS X?
Nohillside

Ответы:

19

В Mountain Lion вы можете использовать caffeinateкоманду.

caffeinate -u -t 1000

предотвратит бездействующий сон на 1000 секунд.

Nemo
источник
1
Я еще не добился успеха ни с какой-либо комбинацией «кофеиновых» cmdline (включая одну из перечисленных выше), ни с Caffeine.app в Mavericks, предотвращающей сон при закрытой крышке. InsomniaX.app - единственное, что до сих пор препятствовало сну крышки, но еще не нашло работающую версию cmdline (пока не заставило goo.gl/CU06jb работать - она ​​может быть устаревшей). Тем не менее, я хочу что-то, что позволяет требовать пароль дисплея даже при отказе от сна в течение ограниченного, программируемого времени при закрытии крышки ... и InsomniaX.app, похоже, тоже этого не делает.
Джонни Юта
1
Похожие проблемы Я нахожусь на Йосемити, и хотя я запускаю кофеин в терминале, через некоторое время экран гаснет, и я должен снова войти в систему. Это наводит меня на мысль, что кофеин не держит Mac в сознании, что является моей целью, чтобы соединение Wi-Fi может сохраняться / все, что у меня происходит, может продолжаться.
dmonopoly
12

Решение этой проблемы - не держать клиента (ваш Mac) в активном состоянии. Использование таких подходов не заслуживает доверия. Что произойдет, если сетевое соединение потеряно? Даже если ваш Mac не спит, сценарий остановится.

использование nohup

Если ваш долгосрочный скрипт вызывается eternity.sh, попробуйте следующее:

nohup /path/to/eternity.sh > /path/to/output.out &

Теперь вы можете даже закрыть соединение, и ваш скрипт продолжит работу . В &фонах процесс , так что вы можете держать соединение открытым и вводить команды. Просмотрите любой вывод из вашего скрипта через:

tail -f /path/to/output.out

Пути в примерах являются необязательными, если сценарий находится на вашем пути, и вы хотите, чтобы вывод сценария записывался output.outв текущем каталоге.

Я управляю сценариями, которые запускаются по несколько дней. Подобные скрипты должны быть отсоединены от терминала. К счастью, nohupобеспечивает легкий для запоминания вызов команды для достижения этой цели - не думайте о зависании .

ephsmith
источник
5
Смотрите также man screen.
@mankoff - я уже использую экран. Это лучшая команда со времен раскола порезанной породы. ;) Суть вопроса в том, чтобы избавиться от необходимости "ssh to @where", когда мой mac засыпает - я просто не хочу завершать сеанс ssh - моя команда на удаленной стороне уже "защищена" экраном , ;)
кобаме
@ephsmith - вопрос был: как устранить прерывание сеанса ssh ... ofc nohup хорош для ситуаций, когда ваша удаленная команда не является интерактивной. Для интерактивных команд экран является гораздо лучшим решением. В любом случае, спасибо за ответ.
Кобаме
1
@kobame, возможно, суть вопроса и эта дополнительная информация должны были быть включены в ваш оригинальный вопрос. Первая строка в вашем вопросе относится к длительному сценарию. Я предположил, что это не было интерактивным, что привело к ссылке на nohup.
Эфсмит
@kobame, любой из этих ответов решил твою проблему?
Эфсмит
8

Другой вариант - pmset . Используйте команду pmset noidle для предотвращения сна, пока pmsetон работает. К сожалению, для этого требуется отдельное окно терминала с pmsetзапущенным в нем. Тем не менее, другой вариант, caffeinateтолько позволяет установить определенное время . Таким образом, это вопрос выбора, хотите ли вы открыть второй сеанс SSH или иметь дело с ограничением времени.

Редактировать: Согласно комментарию бинарного боба , вы можете запустить его в фоновом режиме следующим образом: pmset noidle &Чтобы вернуться к pmsetтипу fg.

daviesgeek
источник
Вы также можете работать pmsetв фоновом режиме, используя pmset noidle &текущую командную строку. Введите, fgчтобы pmsetвернуться, и в этот момент вы можете
нажать
@binarybob Ой! Я этого не знал. Спасибо за чаевые!
daviesgeek
@davisgeek - действительно приятно! Спасибо за отзыв.
Кобаме
1
этот также работает в ноутбуке IPython: !pmset noidle- очень хорошо, когда у вас есть рабочий стол, обслуживающий ноутбук IPython и ноутбук, подключенный удаленно.
Джейсон С
1
Это не работает для меня. Он запускается успешно, появляется сообщение «Предотвращение простоя (выход из режима ^ C) ...», но он все равно переходит в режим сна.
Юлиан
6
caffeinate -i -s /bin/ssh ...

Объяснение:

-i - Предотвратить бездействующий сон.

-s- Предотвратите сон системы (полностью, даже если вы закроете крышку). Примечание: он работает только от сети переменного тока.

/bin/ssh- Просто продолжайте писать команду, которую хотите выполнить. Использование sshнапрямую, а не /bin/sshдолжно также работать.

Результаты: Ваша система не будет спать, пока выполняется sshкоманда.

bogdansrc
источник
-3

Заставка StarMessage ( http://starmessagesoftware.com/moonscreensaver/ ) также позволяет держать MAC в активном состоянии в течение 2 часов, 8 часов или навсегда. Этот способ отключения сна MAC, намного проще, чем кофеин.

Заставка StarMessage
источник
Как это работает для командной строки?
user151019
Обязательно ознакомьтесь с разделом продвижения в Справочном центре .
холме