Сохраните весь процесс для продолжения после перезагрузки

Как описано на FedoraProject wiki на Flash, Вам, возможно, понадобился бы модуль PulseAudio ALSA. Если один из флеш-плагина браузера (или сам pulseaudio) заблокировал звуковое устройство, другие приложения, пытающиеся использовать звуковое устройство, не могли бы успешно выполниться.

55
24.07.2012, 20:49
4 ответа

Лучшее / простое решение состоит в том, чтобы изменить Вашу программу для сохранения состояния в файл повторное использование что файл для восстановления процесса.

Основанный на странице Википедии о снимках приложения существует несколько альтернатив:

  1. Существует также cryopid, но это, кажется, не сохраняется.
  2. Контрольная точка/перезапуск Linux, кажется, хороший выбор, но Ваше ядро должно иметь CONFIG_CHECKPOINT_RESTORE включенный.
  3. criu является, вероятно, самым актуальным проектом и вероятно Вашим лучшим выстрелом, но зависит также от некоторых определенных опций Kernel, которые, вероятно, не установило Ваше распределение.

Это уже слишком поздно, но еще больше практического подхода должно запустить Ваш процесс в специализированном VM и просто приостановить и восстановить целую Виртуальную машину. В зависимости от Вашего гипервизора можно также переместить машину между различными хостами.

Поскольку будущее думает о том, куда Вы выполняете свои продолжительные процессы, как к parallize их и как решить проблемы, например, полные диски, процесс уничтожается и т.д.

42
27.01.2020, 19:33

Довольно "дешевый" способ сделать это должно было бы сделать обработку в VM (например, с VirtualBox). Прежде чем Вы закроетесь, приостанавливают VM и сохраняют состояние. После загружающегося восстановления VM и состояние.

Это действительно имеет недостаток требования уничтожения и перезапуска задания. Но если это на самом деле будет рабочим в течение нескольких месяцев затем, различие девяти дней становится тривиальным (5%-е увеличение более чем 6 месяцев).


Править: Я просто понял, что Ulrich уже упомянул это в непронумерованном объекте 4 в его списке.

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

Я предполагаю, что лучшая вещь сделать состояла бы в том, чтобы попробовать одного из тех и если это не работает, перезапускают задание в VM.

20
27.01.2020, 19:33

Посмотрите на инструмент CryoPID.

От домашней страницы: "CryoPID позволяет Вам получать состояние рабочего процесса в Linux и сохранять его в файл. Этот файл может затем использоваться для возобновления процесса позже, или после перезагрузки или даже на другой машине".

16
27.01.2020, 19:33
  • 1
    Используемый это прежде для сохранения состояния сценария Python, работающего на поле Linux и, переместило его в поле FreeBSD и возобновилось там. Некоторое тайное волшебство, идущее там на ;) –  Tim 24.07.2012, 21:30
  • 2
    я не знал FreeBSD и Linux, был совместим с двоичным файлом; это - что-то очень интересное, которое я просто изучил. Но это означает, что у них есть точно идентичные модели памяти? Это кажется недоверчивым мне, что у них есть те же syscall конвенции, тот же libc (я предполагаю, что fbsd используют glibc), те же точные соглашения о вызовах на asm уровне, и т.д. Несовместимости звучат мне, как будто Вы взяли процесс MacOS и вывели его на поле Windows; это действительно довольно удивительно. –  cat 07.05.2016, 18:33
  • 3
    Кто-либо недавно попробовал это? Сайта не стало, я не могу найти .deb, создающий из исходных сбоев, и т.д. Я хотел бы знать, возможно ли это прежде, чем потратить еще на него. Я нахожусь на Debian, если он имеет значение. –  John P 25.01.2017, 23:20
  • 4
    @JohnP Это доступно на GitHub теперь: github.com/maaziz/cryopid –  starbeamrainbowlabs 06.06.2017, 12:18

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

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

Я поощрил бы Вас производить свою программу к данным "контрольной точки" файла. Эти данные должны быть достаточными, который Ваша программа сможет возобновить от состояния, которым это было в том, когда файл контрольной точки был сохранен. Вы не должны сохранять весь процесс, просто снимок следующих переменных, используемых в Вашем вычислении, достаточном, чтобы Ваше вычисление возобновило, где это кончило. Ваш код должен был бы также включать некоторый способ читать в данных из этого файла для получения, это - начальное состояние.

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

Кроме того, способность видеть, как данные изменяются как прогресс вычисления, могла бы быть интересной сам по себе!

7
27.01.2020, 19:33

Теги

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