Eu tenho um processo de trabalho que processa 1 mensagem RabbitMq de cada vez. No momento, assim que o trabalhador sai, a supervisord a reinicia (o que processará a próxima mensagem).
Eu gostaria de definir um intervalo X segundos, para que a supervisord não seja reiniciada por completo, mas aguarde um determinado período de tempo antes de iniciar outro trabalhador.
Isso é possível? Quão?
fonte
Eu precisava de uma maneira simples de executar um comando dentro de um contêiner de docker, onde não há cron. Aqui está o que estou usando:
O startecs = 0 garante que o supervisor pense que o comando foi iniciado com êxito, mesmo que saia após alguns segundos. Caso contrário, o supervisor irá parar de reiniciá-lo, pensando que está em um loop.
Aqui está o que você veria em /root/date.ts com o exemplo acima:
Sintonize o sono ao seu gosto e substitua 'date >> / root / test.ts' pelo que você precisar.
Essa solução também é útil se você precisar executar um cronjob com mais frequência do que a cada minuto.
fonte
e depois
1. você precisa usar o
exec
comando, caso contrário ele irá bifurcar um subprogresssleep 60 && exec your command
e seu progresso será como o seguintee quando você usa
supervisorctl
para interromper o urApp, interrompe o progresso de 1818 e deixa 3872 um progresso órfão2. recomendo alterar os segundos de inicialização para 5 a mais do que os segundos de suspensão; quando você iniciar este aplicativo e verificar o status, ele mostrará que está começando
caso contrário, se você definir o valor como menor que os segundos de suspensão, ao iniciar o aplicativo e verificar o status, você obterá um status de execução, mas ainda estará dormindo cmd antes da execução real
3. quando você altera seu arquivo de configuração, é necessário usar o comando reload cmd ou apenas reiniciar sua supervisord para fazê-lo funcionar
fonte