2014-11-03 3 views
-7

Необходимо сохранить состояние сценария перед перезагрузкой, а затем возобновить, мне нужно запустить скрипт с того момента, когда он был оставлен.Как возобновить скрипт в Python после перезагрузки системы?

Mine - это система Windows 2k12 на сервере Dell R710. Что я сделал до сих пор: 1. Соленый номер шага, перед которым мне нужно перезагрузить машину. pickle.dump (self.boot_flag, open ('c: \ data.pkl', 'wb')) 2. Я даю «os.system (« shutdown -r -t 0 -f »)« Мой вопрос теперь, показать, чтобы пройти номер шага, который я сохранил, чтобы мой сценарий возобновился оттуда?

+2

У вас проблема не тривиальна. К несчастью, вы не дали никаких подробностей. Чтобы оказать любую помощь, нам нужна дополнительная информация о вашей программе, это модель данных и ОС, на которых вы ее запускаете. –

+1

что ты сделал до этого? – Anzel

+0

Mine - это система Windows 2k12 на сервере Dell R710. Что я сделал до сих пор: 1. Соленый номер шага, перед которым мне нужно перезагрузить машину. pickle.dump (self.boot_flag, open ('c: \ data.pkl', 'wb')) 2. Я даю «os.system (« shutdown -r -t 0 -f »)« Мой вопрос теперь, показать, чтобы пройти номер шага, который я сохранил, чтобы мой сценарий возобновился оттуда? –

ответ

1

У вас есть ряд проблем:

  1. Сохранение состояния (в том числе curent точек исполнения),
  2. обнаруживая выключение/перезагрузка,
  3. повторный запуск после отключения.

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

Редактировать : Убедитесь, что вы можете сохранить свое состояние в небольших атомных кусках. Приложение, которое я написал, использует реляционную базу данных на основе транзакций и сохраняет состояние в наборе из трех таблиц). У меня также есть система, которая может обнаруживать ошибки после факта. Преимущество базы данных состоит в том, что она имеет собственный механизм восстановления в случае сбоев.

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

Редактировать: В качестве примера мое приложение читает базу данных каждый раз при запуске, ища записи, не помеченные как завершенные, - таким образом, она может возобновить работу практически в любой точке.

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

Редактировать: Худший случай на самом деле не является перезапуском/реорганизацией - в этих случаях все запущенные процессы попросят выключить красиво - и вы можете поймать этот сигнал и сделать что-то хотя бы (пока это быстро). Наихудший случай - выключение/сбой питания (из-за перегрева, например), тогда вы не получаете предупреждения и не имеете нулевого шанса на чистое выключение. При разработке вашего приложения вам нужно подумать о том, что может быть хуже.

+0

Привет, спасибо за помощь здесь. Mine - это система Windows 2k12 на сервере Dell R710. Что я сделал до сих пор: 1. Соленый номер шага, перед которым мне нужно перезагрузить машину. pickle.dump (self.boot_flag, open ('c: \ data.pkl', 'wb')) 2. Я даю «os.system (« shutdown -r -t 0 -f »)« Мой вопрос теперь, показать, чтобы пройти номер шага, который я сохранил, чтобы мой сценарий возобновился оттуда? –

+0

Сохраните номер шага в данных рассола. Загрузите данные рассола после перезапуска, а затем вызовите этот шаг. - или ваш вопрос более сложный? –

+0

Да, я понимаю. Теперь, когда я загружаю сохраненный номер шага, как скрипт понимает, что загружаемое число - это номер шага, а не что-то еще? Или мне нужно делать что-то еще? Вопрос 2: Как загрузить сценарий после перезагрузки? Пакетный файл? –

Смежные вопросы