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

  • что такое дескриптор файла моего терминала
  • Как завершить фоновый процесс в Linux, когда pid неизвестен?
  • Как запустить два процесса и узнать, когда они заканчиваются в bash
  • Как получить nohup для выхода с чистого листа при использовании перенаправления файлов
  • Автоматически добавлять «& disown» к командам, начинающимся с «text_editor»?
  • Фоновый процесс PID
  • Как получить pid последней выполненной команды в сценарии оболочки?
  • Как фоновый процесс может узнать свой собственный PID?
  • 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

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

    Распространение stdin на параллельные процессы

    Как определить, находится ли окно в фокусе?

    Рабочая станция Fedora 25 не по умолчанию не использует wayway, используя nouveau на карте nvidea с gnome

    Можно ли вводить новые строки в выводе коровника / коровника, сохраняя при этом «пузырь»?

    Почему пакеты .so предоставляются пакетами devel?

    Как предотвратить отображение tmux в новом окне

    Содержимое каталога не отображается при подключении к CentOS 7 VSFTPD

    Запуск сценариев оболочки через веб-сайт

    Как перезапустить скрипт python через одну секунду с помощью UPSTART?

    Есть ли программное обеспечение с открытым исходным кодом для имитации и практически программирования BIOS компьютера?

    Могу ли я запустить команду, загруженную из .bashrc с помощью sudo?

    Как установить apt-пакеты на сетевой ресурс?

    Скомпилировано ядро ​​(2.6.39-rc1), где соответствующие initramfs?

    команда терминала, которая печатает вкладки, пробелы и символы новой строки как \ t \ s и \ n

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