Daemon para: receive messages - executa o comando background - gerencia o número de tarefas executando simulatenously?

0

Procurando por um programa unix que seja executado em segundo plano (daemon), que:

  1. pode receber mensagens arbitrárias (JSON).
  2. Ao receber uma mensagem, execute um comando especificado.
  3. Tem opção para limitar o número de instâncias desse processo que podem ser executadas por vez.
  4. se mais mensagens forem recebidas do que UPPERlimit, adicione-as a uma fila.

Existe alguma coisa? Estou pedindo muito? Eu não me importaria de uma solução personalizada se isso fosse possível.

Eu examinei sistemas de enfileiramento como o rabbitmq / beanstalk / gearman. Eles não correspondem às minhas exigências, parece ...

Ty

    
por gyaani_guy 11.05.2016 / 02:26

2 respostas

0

Tradicionalmente, inetd (8). A maioria das distribuições do Linux empacota xinetd .

    
por 11.05.2016 / 07:40
0

Não tenho certeza do que você está procurando, mas é possível criar serviços simples usando socat para escutar em uma porta e fazer com que ele execute um script de shell, por exemplo, em cada conexão. Você pode limitar as conexões máximas simultâneas. Por exemplo, crie um script bash ./myscript holding:

#!/bin/bash
read message
echo "hello. got $message"
sleep 10
echo "bye"

Em seguida, inicie socat na porta 10005 com um máximo de 2 filhos para executar o script:

socat TCP4-LISTEN:10005,reuseaddr,fork,max-children=2 SYSTEM:./myscript

Agora você pode se conectar a essa porta usando qualquer ferramenta de rede desejada e interagir com o script. Usando o recurso /dev/tcp/ integrado do bash para se conectar a uma porta, o seguinte será suficiente:

(echo "$(date) my message"; cat -n >&2) <>/dev/tcp/localhost/10005 >&0 &

Se você der este comando várias vezes, apenas 2 serão executados e o restante será enfileirado. Saída típica será

1  hello. got Wed May 11 17:33:19 CEST 2016 my message
2  bye
    
por 11.05.2016 / 17:39