У меня странная проблема, которая, вероятно, связана с инициализацией оборудования. Я работаю над системой автоматического сбора данных на основе Java, которая работает на SBC с Ubuntu 16.04. На данный момент программа сбора данных запущена через cron, хотя я планирую перейти на systemd.
Он запускается и работает нормально, если я перезагружаю систему. Однако, если он выключен и запущен холодным способом (что является нормальным способом), программа вылетает с ошибкой free(): corrupted unsorted chunks
. Если я начну это снова, это, кажется, работает хорошо. Мне нужно выяснить, почему и, надеюсь, будет, но это может занять некоторое время, и в то же время система нуждается в дальнейшем тестировании, и мне нужен обходной путь, который перезапустит ее в случае сбоя. Просто добавление задержки не помогает.
Я хотел бы перезапустить процесс Java или перезагрузить систему из сценария оболочки bash, но только в случае сбоя. Если он завершается с нулевым кодом выхода (или, в идеале, с любым кодом из заранее определенного набора допустимых кодов выхода), он не должен быть перезапущен, и сценарий также должен завершиться.
if
иbreak
и изменить это на эквивалент цикла do-while и вызывать программу только в одном месте (в ней есть несколько аргументов, которые я бы не хотел повторять) и регистрировать код выхода$?
. Существует ли простой и элегантный способ использования набора допустимых кодов выхода (кроме, например, логических операторов[ $? -ne 0 ] && [ $? -ne 73]
)?