Предотвратите приостанавливают перед завершением команды, выполненной от Терминала

Недавно я запустил продолжительный скрипт, который я запустил с Окна терминала в 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 необходима.

1
задан 20 March 2017 в 13:18

2 ответа

Я не уверен, но Вы попробовали systemd-inhibit? Это работает над полями Linux, работающими systemd (Ubuntu 16.04, идущая из них, AFAIK).

Взгляд на страницы справочника, man systemd-inhibit для справки.

3
ответ дан 7 December 2019 в 12:38

Я записал программу keepawake.py, который может контролировать активность ЦП, сетевой трафик и пользовательское действие (мышь/клавиатура). Это может решить Вашу проблему. Я отправил его здесь на AskUbuntu...

там какой-либо способ сделать Ubuntu для не приостановки в то время как происходящая загрузка?

, Если Ваш длительный сценарий вызывает сетевой трафик или инициировал определенный процент от активности ЦП затем, программа выше может решить Вашу проблему.

0
ответ дан 7 December 2019 в 12:38

Другие вопросы по тегам:

Похожие вопросы: