Krótki instruktaż systemd: gniazdka



RTFM: systemd.socket

Do śmieci: inetd, xinetd

Przerobienie naszej usługi na sieciową? Banalnie proste (touchme.socket):

[Socket]
ListenStream=1234

Aktywacja:

 # systemctl load touchme.socket
Unit touchme.socket added.
# netstat -apn | grep 1234

# systemctl start touchme.socket
Unit touchme.socket removed.
Job 67350 added.
Job 67350 removed.
Unit touchme.socket added.
# netstat -apn | grep 1234
tcp        0      0 :::1234                     :::*                        LISTEN      1/init           

Do wyboru obsługa TCP, UDP, SOCK_SEQPACKET i plików FIFO. Od razu możliwość skonfigurowania:

  • ograniczenia nasłuchu do konkretnego urządzenia sieciowego
  • wielkości backlog
  • ustawień podtrzymywania (keep-alive)
  • maksymalnej liczby połączeń i wielkości buforów
  • ustawień priorytetu, TTL i TOS
  • markowania pakietów na potrzeby iptables/tc
  • wybór algorytmu kontroli przepływu TCP

systemd nasłuchuje na wszystkich aktywowanych gniazdach, również tych w systemie plików. Dzięki temu może startować na żądanie nie tylko demony sieciowe, ale również te, do których dostęp realizowany jest przez gniazdka typu /tmp/.s.PGSQL czy /var/lib/mysql/mysql.sock.

Przy usługach, które tworzą nową instancję dla każdego połączenia, warto polecenie w ExecStart= poprzedzić minusem. Wtedy zniknięcie procesu z każdego powodu spowoduje usunięcie instancji. Inaczej instancje usług kończących pracę błędem będą wisiały w systemie, co teoretycznie może doprowadzić do DoSa.

Poprzednio: Cele i migawki; Następnie: Timery.


Archived comments:

pecet 2010-08-05 18:49:32

Link do timerów ci nie działa.

Paweł Ciupak 2010-08-05 19:00:58

> Link do timerów ci nie działa.

No bo pewnie też idzie do śmieci i jest _passe_ ;p.

zdz 2010-08-05 19:01:35

Jutro będzie działał.

Comments


Comments powered by Disqus