Portál AbcLinuxu, 13. května 2025 03:15
#!/bin/bash echo "Ahoj svete" while test 1; do read promenna if [ -z "$promenna" ]; then exit; fi echo $promenna >>/test.txt donea nechal jsem tento skript spustit přes xinet.d na portu 9000
service pmservice { disable = no port = 9700 socket_type = stream protocol = tcp wait = no user = root server = /root/test.sh }To mi fungovalo, až na to, že skript vždy vyčkával na znak CR, teprve potom uložil do souboru to, co mu přišlo na port. Ale já chci, aby ukládal data plynule, aniž by čekal na znak nového řádku, který vlastně ani nemusí přijít. Děkuji za radu, už nevím jak na to.
nohup /usr/bin/nc -k -l 9700 & >/test.txt
Nemělo by to být spíše takto?
nohup /usr/bin/nc -k -l 9700 >./test.txt
Jen drobné, ale možná důležité změny.
mkfifo dummy
nohup cat dummy | /usr/bin/nc -k -l 9700 >/test.txt 2>/dev/null &
nc pak cte ze souboru dummy, ktery vzdy vraci, ze nema zadna data, ale nevrati, ze soubor je prazdny.
nohup usr/bin/nc -k -l 9700 >/test.txt 2>/dev/null <dummy &
Takze ten cat je tam potreba.
netcat
, ale inetd
, xinetd
, případně to zvládne i systemd
.
Na opisování vstupu na výstup slouží odjakživa program cat
.
Sám o sobě by ale opisoval data zpátky
do socketu, takže je potřeba přesměrovat výstup. Pokud daný superdémon
zvládne přesměrování výstupu, je to fajn (určitě to umí systemd, nevím jak ostatní).
Pokud ne, stačí cat
zabalit do triviálního skriptu:
#/bin/sh FILENAME=... cat >$FILENAMETen se pak volá například z
inetd
. Vstup projde catem a přesměruje se do souboru. Výstup žádný není, tudíž protistrana nedostane odpověď (což lze změnit úpravou toho skriptu).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.