Запуск сценария bash bash в фоновом режиме

Я пытаюсь создать сценарий мониторинга, чтобы наблюдать связь localhost с помощью netcat. У меня есть два сценария, которые я создал, один для запуска цикла мониторинга и один для самого цикла. Они заключаются в следующем:

start.sh

  • linux bash если инструкция внутри цикла
  • Как узнать, установлен ли пакет через yum в сценарии bash?
  • Объединяйте и сопоставляйте совпадающие и не соответствующие значения между меньшим файлом и огромным файлом
  • Невозможно перенаправить выходной поток
  • Как сделать необязательные аргументы, которые могут быть именами файлов, содержащими пробелы
  • bash myscript.sh работает в bash, но первая строка: #! / usr / bin / sh
  • #!/bin/bash netcat localhost 1099 | bash loop.sh & 

    loop.sh

     #!/bin/bash while read sInput; do ...do something with $sInput done 

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

    Моя конечная цель состоит в том, чтобы иметь скрипт bash, который я могу создать с помощью сценария daemon linux, и все работает отлично. Ваша помощь приветствуется.

  • Как я могу запускать две команды параллельно и завершать их, если ОДИН из них завершается с кодом выхода 0?
  • Как преобразовать параметры inputrc в bashrc?
  • функция bash для переноса программы и иногда добавить аргумент
  • Идентификатор группы гоночных процессов, как я могу убить группу?
  • Функция, вызывающая другую функцию со списком аргументов, не работает
  • Удалите все, кроме последнего n файла для каждой группы файлов, которые имеют один и тот же префикс в каталоге
  • 3 Solutions collect form web for “Запуск сценария bash bash в фоновом режиме”

    Похоже, что он читает со стандартного ввода (stdin). Попробуйте добавить в netcat параметр -d (Не пытайтесь читать из stdin). Или перенаправлять в командной строке:

     netcat localhost 1099 <&- | bash loop.sh & 

    Вы также можете использовать nohup чтобы убедиться, что он не пострадает, когда / если вы выйдете из этой оболочки до ее остановки.

    Процесс netcat считывается со стандартного ввода. Поскольку он подключен к терминалу, группа процессов, в которой находится netcat (т.е. конвейер), должна работать на переднем плане.

    Вам нужно подключить что-то в начале конвейера, который отправит вход, который ожидает сервер. Например, с HTTP-сервером у вас может быть что-то вроде

     netcat localhost 1099 <<EOF | … & GET HTTP/1.0 http://localhost:1099/somewhere X-Header: wibble EOF 

    Если сервер не считывает никаких данных, переадресуйте ввод netcat из /dev/null .

    Обнаружили утилиту, которая обещает предоставить каналы без необходимости в отдельном новом демонизированном сценарии bash. Может пригодиться: https://github.com/flonatel/pipexec

     pipexec -- [NETCAT netcat localhost 1099] [LOOP bash loop.sh] '{NETCAT:1>LOOP:0}' 
    Linux и Unix - лучшая ОС в мире.