Pode o socat ser iniciado diretamente pelo systemd?

6

A seguinte linha de comando socat funciona como esperado quando inserida em um prompt do shell:

# /usr/bin/socat UDP-RECV:4321 STDOUT

Ele escuta na porta UDP 4321 e grava tudo que recebeu na saída padrão.

O seguinte é uma tentativa de iniciar este comando como um serviço systemd com a intenção de gravar dados recebidos no diário do systemd (o destino padrão para a saída padrão de um serviço):

# /etc/systemd/system/socat.service
[Service]
ExecStart=/usr/bin/socat UDP-RECV:4321 STDOUT

No entanto, socat sai imediatamente quando esse serviço é iniciado:

Process: 7425 ExecStart=/usr/bin/socat UDP-RECV:4321 STDOUT (code=exited, status=0/SUCCESS)

A pesquisa do problema (executando socat com -d -d -d -d ) revela que está obtendo um EOF na saída padrão:

N starting data transfer loop with FDs [5,5] and [1,1]
N socket 2 (fd 1) is at EOF
I close(5)
N exiting with status 0

É possível usar socat como um serviço systemd?

    
por starfry 26.07.2015 / 12:13

1 resposta

7

O problema é que socat é bidirecional por padrão. Ele tenta ler sua entrada padrão, que é /dev/null , obtém um EOF e sai.

A solução é usar a opção -u :

ExecStart=/usr/bin/socat -u UDP-RECV:4321 STDOUT

Isso diz ao socat para rodar unidirecionalmente de UDP-RECV:4321 para STDOUT .

    
por 27.07.2015 / 13:09

Tags