2

Возможно, в связи с этим предыдущим вопросом, я хотел бы иметь возможность запускать задание в течение определенного периода времени, затем останавливать / убивать его, а затем запускать снова.

В частности, я запускаю приложение Folding @ Home на своей рабочей станции Linux. Периодически у него возникают проблемы при входе в систему на домашнем сервере, и он долгое время простаивает, но не освобождает запрошенную память / ресурсы (да, я понимаю, что это скорее всего ошибка в инструменте, но я могу » исправить это в настоящее время). Как правило, просто акт убийства и запуска инструмента позволит ему снова зарегистрироваться.

Итак, я хотел бы иметь возможность запустить что-то вроде:

run_for <time> ./fah6

Существует ли такой инструмент, или я должен написать обертку, а не обработать ядро клиента fah6 , скажем, через неделю, и перезапустить его?

5 ответов5

9

инструмент тайм-аута.

timeout - запустить команду с ограничением по времени

тайм-аут [ОПЦИЯ] ДЛИТЕЛЬНАЯ КОМАНДА [АРГ] ...
тайм-аут [ВАРИАНТ]

Запустите КОМАНДУ и убейте ее, если все еще работает после ДЛИТЕЛЬНОСТИ.

например:

    timeout 15s ./fah6 
5

Я могу быть старой школы, но это звучит как работа для cron. Просто убейте / перезапустите его с помощью cron по соответствующему графику. Вы должны будете принять во внимание, может ли fah6 легко «подхватить то, что остановилось», но я не вижу проблем с ежедневным перезапуском.

Хотей

3
sleep 60 & VAR=$! ; sleep 10 ; kill $VAR

В этом примере « sleep 60 » является заполнителем для команды, которую вы хотите прекратить досрочно. Замените « 10 » на то, как долго вы хотите выполнить свою команду (не более) в течение нескольких секунд. Вышесказанное должно завершиться через 10 секунд, убивая процесс ' sleep 60 '.

Обратите внимание, что это для Bash.

1

Персонально, я бы реализовал это в скрипте для возможности запуска, ожидания и уничтожения подпроцесса.

В Python с чем-то вроде:

http://docs.python.org/dev/library/multiprocessing.html

Если это не в Pyton, используйте os.system('./fah6') в коде скрипта, который обрабатывает wait/stop/restart

1

cron будет работать, но если вы хотите, чтобы он запускался только один раз, или если время будет меняться изо дня в день, то было бы проще использовать at (на странице man):

$ ./fah6 &
[1] 12345
$ at 1800
at> kill 12345
at> <EOT>

Шаги:

  • начать fah6 в качестве фонового задания (далее & в конце строки запускает его в качестве фонового задания). Следующая строка сообщает номер процесса
  • за этим следует время, чтобы закончить работу
  • появится приглашение at> , введите kill и номер задания, указанный выше
  • чтобы прекратить ввод команд, выйдите, нажав Ctrl-D

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .