Executando script bash canalizado em segundo plano

5

Estou tentando criar um script de monitoramento para assistir à comunicação do host local usando o netcat. Eu tenho dois scripts que eu construí, um para iniciar o loop de monitoramento e um para o loop em si. Eles são os seguintes:

start.sh

#!/bin/bash
netcat localhost 1099  | bash loop.sh &

loop.sh

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

Simplesmente executar este aplicativo sem o primeiro plano funciona bem, mas assim que eu tento rodar este script em segundo plano ele vai da execução para o estado parado instantaneamente. Alguém poderia me ensinar por que isso está acontecendo e como aliviar o problema?

Meu objetivo final é ter um script bash com o qual eu possa criar um script do daemon linux do arch e ter tudo funcionando perfeitamente. Sua ajuda é apreciada.

    
por Andrew Munro 20.03.2012 / 23:58

3 respostas

5

Parece que está lendo a entrada padrão (stdin). Tente adicionar a opção -d (não tentar ler de stdin) a netcat . Ou redirecione na linha de comando:

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

Você também pode querer usar nohup para ter certeza de que não será afetado adversamente quando / se você sair do shell antes dele parar.

    
por 21.03.2012 / 00:28
3

O processo netcat está lendo a entrada padrão. Como está conectado ao terminal, o grupo de processos no qual o netcat está (ou seja, o pipeline) deve ser executado em primeiro plano.

Você precisa conectar algo no início do pipeline que enviará a entrada que o servidor espera. Por exemplo, com um servidor HTTP, você pode ter algo como

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

EOF

Se o servidor não ler nenhuma entrada, redirecione a entrada de netcat de /dev/null .

    
por 21.03.2012 / 00:30
1

Descobrimos um utilitário que promete fornecer pipes sem a necessidade de um novo script separado e daemonizado. Pode ser útil: link

pipexec -- [NETCAT netcat localhost 1099]  [LOOP bash loop.sh] '{NETCAT:1>LOOP:0}'
    
por 27.07.2015 / 16:35