Est-ce que socat peut être démarré directement par systemd?

La command line socat suivante fonctionne comme prévu lors d'une input à l'invite du shell:

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

Il écoute sur le port UDP 4321 et écrit tout ce qui est reçu sur la sortie standard.

Voici une tentative de démarrage de cette command en tant que service systemd avec l'intention d'écrire datatables reçues dans le journal systemd (la destination par défaut de la sortie standard d'un service):

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

Cependant, socat se termine immédiatement lorsque ce service est lancé:

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

En recherchant le problème (en cours de socat avec -d -d -d -d ), il est évident qu'il obtient un EOF sur la sortie standard:

 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 

Est-il possible d'utiliser socat comme service systemd?

Le problème est dû au fait que socat est bidirectionnel par défaut. Il tente de lire son input standard qui est /dev/null , il obtient un EOF et sort.

La solution consiste à utiliser l'option -u :

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

Cela indique à socat de s'exécuter unidirectionnellement depuis UDP-RECV:4321 vers STDOUT .