1
Software / systemd: FIFO socket jako stdin bez socket activation
« kdy: 26. 07. 2016, 09:58:02 »
systemd umí socket activation a umí předat socket jako stdin daného procesu.
sluzba.service:
sluzba.socket:
Tohle funguje a lze předávat data danému procesu na stdin přes daný socket.
Lze (a tady začíná můj dotaz) předat socket na stdin BEZ socket activation?
Jedná se mi o to, že existují programy, které se dají řídit jen přes sekvence v terminálu. Dosud se to řeší přes screen / tmux a send-keys funkce těchto terminal multiplexorů. Což se zase dost špatně řídí jako služba (to by ani tak nevadilo), ale hlavně výstup z daného procesu (stdout a stderr) končí v nenávratnu (zatímco při spuštění systemd se výstupy logují).
Výše uvedené řešení funguje, funguje dobře, ale není příliš vtipné, když se do socketu pošle echo "stop" > sluzba.socket, ona se nastartuje (socket activation) a v momentě, kdy si proces přečte stdin, tak se opět ukončí.
Je tedy nějaká možnost, jak tomu předat fifo socket jako stdin bez aktivace?
sluzba.service:
Kód: [Vybrat]
[Service]
ExecStart=...
StandardInput=socket
sluzba.socket:
Kód: [Vybrat]
[Socket]
ListenFIFO=/path-to-socket
Tohle funguje a lze předávat data danému procesu na stdin přes daný socket.
Lze (a tady začíná můj dotaz) předat socket na stdin BEZ socket activation?
Jedná se mi o to, že existují programy, které se dají řídit jen přes sekvence v terminálu. Dosud se to řeší přes screen / tmux a send-keys funkce těchto terminal multiplexorů. Což se zase dost špatně řídí jako služba (to by ani tak nevadilo), ale hlavně výstup z daného procesu (stdout a stderr) končí v nenávratnu (zatímco při spuštění systemd se výstupy logují).
Výše uvedené řešení funguje, funguje dobře, ale není příliš vtipné, když se do socketu pošle echo "stop" > sluzba.socket, ona se nastartuje (socket activation) a v momentě, kdy si proces přečte stdin, tak se opět ukončí.
Je tedy nějaká možnost, jak tomu předat fifo socket jako stdin bez aktivace?