Solaris: сокет, прослушивающий порт (эквивалент /etc/xinetd.d в Linux)

Solaris: сокет, прослушивающий порт (эквивалент /etc/xinetd.d в Linux)

Я подготовил скрипт, который принимает запрос на порт сервера, затем обрабатывает пользовательский ввод, обеспечивает вывод через тот же порт и затем умирает. Скрипт не всегда работает, но запускается, когда клиент открывает определенный порт. (Рабочая) конфигурация на моей машине Linux такова:

/etc/services
    test_socket   9876/tcp    # TestSocket

/etc/xinetd.d/test_socket
    # default: on
    # description: blah blah blah
   service test_socket
   {
      port        = 9876
      socket_type = stream
      protocol    = tcp
      wait        = no
      user        = root
      server      = /export/home/stefano/do_something.php
      instances   = 20
   }

Как только клиент открывает порт :9876, скрипт «do_something.php» начинает принимать входящие сообщения, обрабатывать их и выдавать результат в качестве вывода, прежде чем завершить работу и закрыть соединение.

Я хотел бы перенести/реплицировать вышеуказанную архитектуру на машину Solaris 10.

Для этой цели я настроил то же значение в том же файле служб:

/etc/services
    test_socket   9876/tcp    # TestSocket

Но тогда... поскольку inetd.d отклонен в Solaris10 и заменен на svc, как мне создать манифест для воспроизведения того же поведения?

Я пытался искать в документации, но не смог найти ничего, что запускалось бы по требованию, когда клиент запрашивает соединение через порт сервера.

Кто-нибудь может мне помочь?

решение1

Сначала вам нужно создать inetd.confфайл стиля с вашей конфигурацией. Это должно быть довольно просто, что-то вроде:

test_socket stream tcp nowait root /export/.../do_something.php do_something.php

Затем выполните эту команду, чтобы импортировать описание службы в smf.

inetconv -i inetd.conf-style-file

Если вы хотите сначала посмотреть, что будет создано без импорта, вы можете выполнить:

inetconv -n -i inetd.conf-style-file -o /tmp

Обратите внимание, что после импорта smfв вы администрируете службу черезinetadmкоманда, например:

inetadm -e svc:/network/test_socket/tcp:default # enable the service
inetadm -d svc:/network/test_socket/tcp:default # disable the service
inetadm -l svc:/network/test_socket/tcp:default # list the service properties

Связанный контент