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