Preparei um script que aceita uma solicitação em uma porta do servidor, processa a entrada do usuário, fornece uma saída pela mesma porta e depois morre. O script nem sempre está em execução, mas é iniciado quando uma determinada porta é aberta pelo cliente. A configuração (de trabalho) na minha máquina Linux é esta:
/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
}
Assim que um cliente abre a porta: 9876, o script 'do_something.php' começa a aceitar a mensagem recebida, processa-a e fornece um resultado como saída antes de morrer e fechar a comunicação.
Gostaria de migrar/replicar a arquitetura acima para a máquina Solaris 10.
Para isso, configurei o mesmo valor no mesmo arquivo de serviços:
/etc/services
test_socket 9876/tcp # TestSocket
Mas então... sendo o inetd.d descartado no Solaris10 e substituído pelo svc, como posso criar um manifesto para reproduzir o mesmo comportamento?
Tentei pesquisar a documentação, mas não consegui descobrir nada que fosse iniciado sob demanda quando o cliente solicitasse comunicação pela porta do servidor.
Alguém pode me ajudar?
Responder1
Primeiro você precisa criar um inetd.conf
arquivo de estilo com sua configuração. Isso deve ser bem simples, algo como:
test_socket stream tcp nowait root /export/.../do_something.php do_something.php
Em seguida, execute esse comando para importar a descrição do serviço para o arquivo smf
.
inetconv -i inetd.conf-style-file
Se você quiser primeiro dar uma olhada no que seria criado sem importá-lo, você pode executar:
inetconv -n -i inetd.conf-style-file -o /tmp
Observe que uma vez importado para smf
, você administra o serviço através doinetadm
comando, por exemplo:
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