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

У меня есть сценарий оболочки 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 

  • вставить значение из ссылочного файла
  • Почему команда exit не выходит из вложенного цикла?
  • удаление пробелов и номеров
  • Хранить задержанный вывод оболочки в переменную?
  • Я могу запустить код из терминала, но ту же команду, выдающую ошибку при запуске в сценарии оболочки
  • Как создать функцию, которая принимает имя с целым суффиксом в качестве аргумента и увеличивает этот суффикс?
  • не может определить ошибку в сценарии оболочки неожиданный оператор
  • проверять количество записей в заголовке
  • 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
    Linux и Unix - лучшая ОС в мире.