Скрипт "защита от сбоев" и использование systemd для обеспечения почти постоянной работы - PullRequest
0 голосов
/ 10 мая 2018

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

Сценарий Python, который я пишу, должен постоянно запускаться (в идеальном мире, я понимаю, что это не совсем возможно) на развернутом устройстве. Я уже посвятил время добавлению операторов try ... Кроме того, чтобы в случае возникновения проблемы сценарий восстанавливался и продолжал работать.

Проблема в том, что я не уверен, что могу (и не должен) обрабатывать каждое возможное исключение, которое может быть сгенерировано. Поэтому я решил, что может быть лучше позволить скрипту умереть и использовать systemd для его перезапуска.

Три варианта:

  • Не пытаться обработать какое-либо исключение и просто позволить systemd перезапустить его, когда оно умрет.
  • Тщательно создавая обработчики для каждого возможного исключения, чтобы гарантировать, что, за исключением потери мощности, ошибки интерпретатора или тепловой смерти вселенной, скрипт всегда будет работать.
  • Сочетание двух - попытка предотвратить сбои в одних случаях, а в других - позволить systemd перезапустить скрипт.

Третий выбор кажется мне наиболее разумным. Таким образом, вопрос заключается в следующем: Какие факторы следует учитывать при оптимизации между «защищенным от сбоев» кодом и разрешением сбоя и перезапуска с помощью systemd?

Для получения дополнительной информации, относящейся к конкретному приложению: с запуском сценария связаны небольшие, но заметные накладные расходы, основная часть будет выполняться от 50 до 100 раз в секунду, она не является "критически важной" в том смысле, что не будет смерти / повреждение в случае сбоя (просто некоторая потеря данных), и я уже ожидаю периодических проблем с сетью, в которой он будет.

1 Ответ

0 голосов
/ 10 мая 2018

Все известные исключительные случаи должны быть обработаны. Любое неопределенное поведение является потенциальной проблемой безопасности.

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

...