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

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

start.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, и все работает отлично. Ваша помощь приветствуется.

  • Переменная Shell в теге <a href>
  • Узкие символы
  • Запуск всех сеансов терминала в / usr / bin / script
  • Как удалить самый старый каталог в данном каталоге?
  • Использование переменной оболочки с grep
  • «Dpkg -l» получает символ подстановки оболочки?
  • Ошибка Bash, не распознающая escape-коды Unicode
  • Как вы указываете количество строк каждого файла в каталоге в человекообразном формате.
  • 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}' 
    Interesting Posts

    Рекурсивно удалять файлы с именем «WIDTHxLENGTH» в имени в каталоге

    Как обращаться к любым файлам или сценариям, упакованным внутри RPM из% pre% post scriptlets

    Нет действительных источников судопроизводства

    Как заменить определенный текст на соответствующий номер строки с помощью sed?

    Маршрутизировать трафик VPN-шлюза через tun0 вместо обычного шлюза

    Как подключить Windows / Samba к Windows?

    Бесконечный цикл данных от dev / ttyUSB при отправке AT-команд

    Как закончить бесконечный цикл на сервере облаков?

    Установить цвет линии состояния tmux на основе имени хоста

    Есть ли способ автоматически перезапустить докер после обновления правил брандмауэра с помощью iptables?

    Ошибка qmake при установке PyQt5

    SSH в локальной сети при хостинге одной сети

    Будут ли поддерживаться символические ссылки, если путь цели остается тем же, но все передается на новый диск?

    Веб-сервер root в / home / user

    Можно ли загружать чрезвычайно большие файлы разумно или по частям через SSH от Linux до Windows?

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