Недавно я запустил продолжительный скрипт, который я запустил с Окна терминала в Ubuntu 16.04 x64. Когда я убежал от системы, она в конечном счете приостановила автоматически после 20 минут, к которым мне настроили ее в System Settings
окно, которое имело эффект приостановки сценария. Когда я возвратился к системе, я понял, что несколько часов достижений по выполнению моего сценария были потеряны, потому что система приостановила.
Одно обходное решение должно вручную выбрать Don't suspend
в Power
окно настроек, выбранное из System Settings
. Этот метод для предотвращения приостанавливает, является неудовлетворительным (1) потому что я часто забываю делать это и (2) потому что это делает меня подвластным моей системе.
Возможно, существует дождевик, но все еще ручной способ сделать это с некоторой командой префикса, которую я назову nosuspend
на данный момент, с этим использованием: nosuspend python myscript.py arg1 arg2
. Мое основное схватывание с этой мифической командой - то, что она все еще требует, чтобы я не забыл использовать ее, и, так как неблагоразумно снабдить префиксом все терминальные команды, нужно предсказать, займет ли сценарий 1 минуту или 1 час для выполнения, и этот прогноз может быть неправильным, ведя снова к потере времени и разочарованию.
Идеально, решение предотвратило бы, приостанавливают до всех команд, выполненных из завершенного Окна терминала. На некотором уровне я понимаю, что это невозможно, поскольку процесс удара в Окне терминала может иметь подпроцесс, что мы не можем хотеть предотвращать сон, например, sudo su
выполняемый в Окне терминала все еще работает даже при том, что мы не можем в настоящее время использовать его и таким образом неактивны, но мы все еще хотим, чтобы система приостановила автоматически после 20 минут, сказала. Так, существует проблема определения критериев, приостанавливают.
Я должен отметить, что рассматриваемый сценарий Python имел только спорадический диск, сеть и почти никакую работу ЦП, поскольку это повторило Python time.sleep () вызовы до меньше чем минуты на вызов. Поэтому я особенно не ищу методы, которые просто обнаруживают "довольно" состояние покоя в диске, сети или ЦП. Возможно, существует способ обнаружить, если команда, которая является подпроцессом Терминала, сделала какие-либо успехи вообще во время интервала (надо надеяться, тот же интервал, настроенный в Power
выше). Надо надеяться, это отличило бы мой сценарий от неактивного вышеупомянутого sudo su
контрпример.
Обновите 1 (14 сентября 2016):
Как рекомендуется Adrine Correya ниже, я попробовал systemd-inhibit
, который походит на предполагаемый nosuspend
выше, но это не работало. Вот то, что я сделал. Сначала я создал сценарий тестирования Python, называемый "долго-job.py":
#!/usr/bin/python3
import time
print("starting")
for i in range(10):
time.sleep(10)
print("epoch", i)
print("all done")
Затем я сделал это исполняемым использованием chmod +x long-job.py
. Для ускорения тестирования я установил org>gnome>settings-daemon>plugins>power>sleep-inactive-ac-timeout
к 20 (секунды) с помощью dconf-editor
(установленный с помощью программного обеспечения Ubuntu). Я затем запустил скрипт, без root/sudo, с помощью systemd-inhibit ./long-job.py
, но система все еще заснула, прежде чем задание было закончено (должно потребоваться приблизительно 100 секунд, чтобы работать, но спать, произошел после 20 секунд). Я также попробовал несколько опций (--what="sleep"
и --what="idle"
) но это все еще не работало. Согласно странице справочника, значение по умолчанию --what="idle:sleep:shutdown"
.
Обновите 2 (14 сентября 2016):
На Mac OS X это кажется этим caffeinate
на самом деле реализации nosuspend
идея выше; см. https://superuser.com/questions/99247/stop-a-mac-from-sleeping-while-a-bash-script-is-running-then-allow-it-to-sleep. Снова, было бы хорошо автоматизировать это, таким образом, мы не должны предполагать, какие задания могли бы быть продолжительными. Кроме того, версия Ubuntu необходима.
Я не уверен, но Вы попробовали systemd-inhibit
? Это работает над полями Linux, работающими systemd (Ubuntu 16.04, идущая из них, AFAIK).
Взгляд на страницы справочника, man systemd-inhibit
для справки.
Я записал программу keepawake.py, который может контролировать активность ЦП, сетевой трафик и пользовательское действие (мышь/клавиатура). Это может решить Вашу проблему. Я отправил его здесь на AskUbuntu...
там какой-либо способ сделать Ubuntu для не приостановки в то время как происходящая загрузка?
, Если Ваш длительный сценарий вызывает сетевой трафик или инициировал определенный процент от активности ЦП затем, программа выше может решить Вашу проблему.