Выход из скрипта, который перезапускает приложение

У меня есть сценарий оболочки bash, который использует wait () для определения выхода приложения. Тем не менее, мне тяжело убивать скрипт / приложение, когда я этого хочу. Идея сценария заключается в том, чтобы перезапустить приложение, если оно умирает или обновление программного обеспечения должно произойти, но мне нужно, чтобы бэкдор или сигнальная ловушка могли убить его, не перезагружая приложение.

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

Вот сценарий:

# Initial Launch of the application /app & while true do PID=$! #process ID of app # The app background process uses exit(0) to possibly end. wait $PID if [ -f $FILE ]; then echo "Update successfully" mv appcp app chmod "+x" app /app & # restart else #error happened if file does not exist #restart /app & fi done 

  • Сценарий оболочки для создания дублированного вывода с шагом
  • Как отобразить всю строку текста?
  • Скрипт Simple Shell для регистрации дискового пространства
  • Выведите что-нибудь (в цикле) до нажатия клавиши
  • запуск сценария в определенное время без использования cron
  • Сценарий Bash не детерминирован при выполнении действий
  • В чем смысл ## * в сценарии оболочки?
  • Как проверить файлы ~ application / x-trash
  • One Solution collect form web for “Выход из скрипта, который перезапускает приложение”

    Такое может случиться. Я добавил «ловушку» в функцию оболочки с именем «quitter», которая вызывается, если и когда стартовый скрипт получает SIGINT.

     #!/bin/bash function quitter { echo "SIGINT handler, disowning $PID" disown $PID exit 1; } trap quitter SIGINT FILE=appcp ./app 1000 & PID=$! #process ID of app while true do # The app background process uses exit(0) to possibly end. wait $PID if [[ -f $FILE ]] then echo "Update successfully" mv $FILE app chmod "+x" app ./app & else echo plain restart ./app & fi PID=$! #process ID of app done 

    Я не совсем уверен, что делать то, что нужно делать внутри функции trap-handler, – это правильная вещь, но я не могу понять, что вы пытаетесь сделать. Когда я запускаю скрипт с помощью скомпилированной программы, которая просто спит в течение 1000 секунд как «приложение». Контроль-C программы «стартер» оставляет работу «приложение». Это bash 4.3.042-3 на обновленной машине x86_64 Arch Linux, ядро ​​4.1.9.

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

    Interesting Posts

    Имеет ли segfaults плохую память

    Как изменить файл systemctl с помощью сценария оболочки или boto в aws

    Пользователь Ghost? Пользователь не отображается на экране входа в систему или в команде «users»

    настраивать пакет нестандартным способом и разрешать требования к библиотеке

    Создайте относительный путь, пройдя через родительский каталог

    Почему Arch Linux не отключает наушники Windows

    Структура на диске в начале RAID 1 (сначала 128 MiB)

    Как я могу эффективно очистить установленный вручную пакет?

    U-Boot env из Linux БЕЗ МПД

    OpenSSH: как закончить блок соответствия

    Как заставить VPN-клиентов использовать только прокси-сервер SOCKS5?

    Новые версии Mozilla (Iceweasel / Icedove) не работают при использовании пересылки X

    Как изменить цветовую схему LibreOffice на более оригинальный цвет?

    Как перезаписать ярлыки по умолчанию терминала в xfce?

    команда find иногда приводит к тому, что файлы, не соответствующие совпадению

    Linux и Unix - лучшая ОС в мире.