C++ программа наблюдения за Raspberry Pi

На моем устройстве работает приложение C++, которое представляет собой немного модифицированную версию Raspberry PI. Приложение считывает данные из последовательного порта, и мне нужно, чтобы устройство перезагрузилось после получения определенных данных. Мне было интересно интегрировать эту функцию со сторожевым таймером, но я понятия не имею, как это сделать. Может быть, есть возможность отправить какой-нибудь сигнал из моего приложения на сторожевой таймер, чтобы сказать, что пора перезагрузиться?

P.S. Приложение запускается как служба systemd.

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

Marco 14.06.2019 14:30

@ Марко, конечно, вызов перезагрузки был первым, о чем я подумал. Но для меня watchdog звучит гораздо правильнее. не так ли?

oodessit 14.06.2019 14:36

@oodessit sounds не является техническим аргументом. Марко объяснил, как используются сторожевые таймеры, и указал, что ваш случай не соответствует этому сценарию.

Marek R 14.06.2019 14:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
173
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Почему бы вам сделать это таким образом? Причина, по которой используются сторожевые таймеры, — это именно то, что описал Марко. Если система не отвечает, срабатывает сторожевой таймер. Обычно это необходимо, потому что устройства, которые, скажем, выключены, больше не отправляют что-нибудь, поэтому вам нужен какой-то триггер, чтобы ваша система знала, что она должна перезагрузиться. Здесь вы уже получаете свой триггер от входящего сигнала, поэтому сторожевой таймер избыточен. Просто перезагрузитесь после того, как вы получили свои данные.

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

Ответ принят как подходящий

Вызов

std::system("sudo reboot");

Это правильный ответ на проблему. Однако я бы не ожидал, что sudo reboot будет работать в большинстве случаев установки, поскольку обычно требуется ввод пароля, что может быть невозможно. Вы можете поиграть с /etc/sudoers, чтобы дать данному пользователю право на перезагрузку без пароля, но это некрасиво.

xryl669 14.06.2019 15:55

Вместо этого используйте reboot напрямую (для этого потребуется запустить основное приложение с правами root).

xryl669 14.06.2019 15:55

Для перезагрузки без пароля см. это

xryl669 14.06.2019 15:59

Другие вопросы по теме