Повторно запустить скрипт приложения, когда он падает?

У меня есть несколько приложений, которые нужно постоянно запускать на моем ноутбуке.

Я использую скрипт bash для запуска этих приложений. В моем скрипте у меня есть цикл, который выглядит примерно так:

while true;
do
    xterm
done

Это запускает приложение (в данном случае xterm), и если приложение вылетает, цикл запускает его снова.

Это имеет тот недостаток, что нет «чистого» выхода из этой петли. Таким образом, даже если пользователь намерен закрыть xterm, цикл запускает его снова.

Есть ли способ запустить приложение из скрипта bash, посмотреть, запущено ли оно, перезапустить , если скрипт вышел из строя или ничего не делать Если пользователь закрыл его правильно?

18
задан 20 January 2015 в 06:52

4 ответа

Попробуйте это:

while true; do xterm && break; done

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

&& просто проверки, что предыдущая команда была выходом нулевого состояния и если это было, повреждает цикл. Если это откажет, это выведет что-то другое, чем 0 и && ..., пункт не инициирует; это будет просто циклично выполняться назад вокруг и работать xterm.

0
ответ дан 20 January 2015 в 06:52

В while условие можно протестировать, был ли статус выхода xterm успешен или не с чем-то вроде этого:

result=1
while [ $result -ne 0 ]; do
    xterm
    result=$?
done

$? переменная содержит статус выхода последней выполняемой команды.

0
ответ дан 20 January 2015 в 06:52

Я предложу, чтобы Вы использовали.

до xterm; действительно повторить "программу, законченную $ состояния?"; сделанный

Это повторно выполнит Вашу программу, если она будет уничтожена.

0
ответ дан 6 October 2019 в 14:37

Попробуйте использование супервизор , это очень простой и легкий к добавляет программу или сценарий для выполнения . В Вас случай как минимальный Вам нужно command и возможно exitcodes в programx-раздел для конфигурирования.

Значение по умолчанию exitcodes 0,2, таким образом, это означает:

supervisord перезапустит процесс, если он выйдет с кодом выхода, который не определяется в этом списке

В целом, случается так, что Вы хотите: повторно выполняется это, если разрушенный сценарий или ничего не делает , если пользователь закрылся, это правильно (или сценарий, завершенный успешно)

, пробует самую простую конфигурацию сначала:

[program:you_app_name]
command=/path/to/you/app

К большей гибкости см. конфигурационный файл документация.

0
ответ дан 6 October 2019 в 14:37

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

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