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

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

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

  • Как создать функцию, которая принимает имя с целым суффиксом в качестве аргумента и увеличивает этот суффикс?
  • Bash (Ubuntu) - Строки в циклах?
  • bash: синтаксическая ошибка около неожиданного токена `('
  • Поиск строки в выводе команды
  • Скопируйте созданный файл в UNIX
  • сценарий bash, который печатает использование процессора, дисковое пространство, использование ram
  • Вот сценарий:

    # 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 

  • Присвоение вывода команды переменной означает странные результаты
  • сценарий оболочки выполняется дважды
  • Неожиданный результат при использовании аргументов командной строки для поиска файла с символом
  • Как я могу либо зашифровать, либо сделать мой сценарий оболочки нечитаемым?
  • Как использовать вывод команды для процесса в цикле в Bash?
  • Как найти процесс с максимальными файловыми дескрипторами?
  • 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.

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

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