Сценарий Python останавливается примерно через 3 часа

Я понимаю, что это несколько неопределенный вопрос, но у меня есть сценарий python, который должен работать в течение двух лет на малине pi и проваливается примерно через 3 часа. Не вдаваясь в подробности о том, что делает скрипт (я не уверен, что сам сценарий виноват), интересно то, что процесс, похоже, перестает быть мертвым на своих дорожках, т. Е. Никаких предупреждений, ошибок или сбоев нет генерируется, когда он терпит неудачу, процесс просто останавливается и прерывает сеанс терминала, т. е. я не могу вводить никаких дополнительных команд, когда это происходит. Этот процесс также исчезает из списка процессов, выполняемых pi (из верхней команды).

Кто-нибудь знает, что может быть? Есть ли какая-нибудь причина, по которой скрипт просто остановится через некоторое время? Я более чем счастлив опубликовать подробные сведения о том, что делает скрипт, если нужно, я просто подумал, что это может иметь нечто большее, чем то, как он взаимодействует с ОС.

Вот как я запускаю скрипт:

python animation.py &

Запуск модели B + 512 МБ, подключенной к Интернету через WIFI, включение PI через USB

UPDATE:

Я попробовал запустить скрипт с моего Mac, то же самое произошло примерно через 3 часа. На этот раз программа не исчезла из списка процессов, она осталась в спящем состоянии, и загрузка процессора снизилась до 0% , в то время как экран, на котором я смотрел, стоял, казалось, был заморожен. Я выполняю некоторую последовательную связь со сценарием, возможно ли, что он повесил трубку на ответ?

4 голоса | спросил Collin Schupman 11 MarpmWed, 11 Mar 2015 20:10:21 +03002015-03-11T20:10:21+03:0008 2015, 20:10:21

3 ответа


6

Не совсем ответ, но предположение, потому что это довольно неопределенный вопрос.

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

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

  • Убедитесь, что процесс правильно перезапущен init.
  • Отключение стандартных потоков ввода и вывода, если вы иначе не перенаправляете их.

Итак,

setsid python animation.py < /dev/zero &> /dev/null &

См. man setsid - это гарантирует, что процесс разветвления будет перезапущен init. Другим материалом является перенаправление ввода /вывода (выход, который вы, вероятно, действительно хотите отправить в журнал вместо /dev/null).

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

ответил goldilocks 11 MarpmWed, 11 Mar 2015 21:49:27 +03002015-03-11T21:49:27+03:0009 2015, 21:49:27
2

Просто некоторые знания, которыми я управлял несколько недель назад. Я видел людей с аналогичными проблемами, когда речь идет о создании системы гидропоники. Оказалось, что были переменные, которые были увеличены, что прошло мимо распределения памяти для его типа. Когда вы запускаете программу для расширенного периода времени , я видел это в нескольких случаях, это может быть проблемой. Я думаю (как обход) они использовали тип «long long» или «unsigned int», так что значения приращения могут хранить большее число до того, как он сработает.

ответил Justin C. 11 MarpmWed, 11 Mar 2015 21:46:58 +03002015-03-11T21:46:58+03:0009 2015, 21:46:58
1

Запустите свой код с помощью профайлера и отладчика. Что-то в скрипте или как его настройка вызывает сбой сценария.

Мое лучшее предположение - утечка памяти или переполнение переменной.

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

Переполнение переменных - это отличная возможность. Почему вы увеличиваете переменную за 30 секунд или около того? Было бы проще просто вычислить значение, когда оно вам понадобится?

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

ответил NomadMaker 26 PMpThu, 26 Apr 2018 16:36:34 +030036Thursday 2018, 16:36:34

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132