У меня есть несколько приложений, которые нужно постоянно запускать на моем ноутбуке.
Я использую скрипт bash для запуска этих приложений. В моем скрипте у меня есть цикл, который выглядит примерно так:
while true;
do
xterm
done
Это запускает приложение (в данном случае xterm
), и если приложение вылетает, цикл запускает его снова.
Это имеет тот недостаток, что нет «чистого» выхода из этой петли. Таким образом, даже если пользователь намерен закрыть xterm
, цикл запускает его снова.
Есть ли способ запустить приложение из скрипта bash, посмотреть, запущено ли оно, перезапустить , если скрипт вышел из строя или ничего не делать Если пользователь закрыл его правильно?
Попробуйте это:
while true; do xterm && break; done
Приложения имеют коды статуса выхода так, чтобы, если что-то выходит прекрасный, это возвратило нуль... И если что-то пошло не так, как надо, это выводит другое число. Это позволяет людям сцепляться в и узнавать точную проблему. Это - то, что делает другой ответ.
&&
просто проверки, что предыдущая команда была выходом нулевого состояния и если это было, повреждает цикл. Если это откажет, это выведет что-то другое, чем 0 и && ...
, пункт не инициирует; это будет просто циклично выполняться назад вокруг и работать xterm
.
В while
условие можно протестировать, был ли статус выхода xterm
успешен или не с чем-то вроде этого:
result=1
while [ $result -ne 0 ]; do
xterm
result=$?
done
$?
переменная содержит статус выхода последней выполняемой команды.
Я предложу, чтобы Вы использовали.
до xterm; действительно повторить "программу, законченную $ состояния?"; сделанный
Это повторно выполнит Вашу программу, если она будет уничтожена.
Попробуйте использование супервизор , это очень простой и легкий к добавляет программу или сценарий для выполнения . В Вас случай как минимальный Вам нужно command
и возможно exitcodes
в programx-раздел для конфигурирования.
Значение по умолчанию exitcodes
0,2, таким образом, это означает:
supervisord перезапустит процесс, если он выйдет с кодом выхода, который не определяется в этом списке
В целом, случается так, что Вы хотите: повторно выполняется это, если разрушенный сценарий или ничего не делает , если пользователь закрылся, это правильно (или сценарий, завершенный успешно)
, пробует самую простую конфигурацию сначала:
[program:you_app_name]
command=/path/to/you/app
К большей гибкости см. конфигурационный файл документация.