20 pontos por xguru 2025-11-11 | 2 comentários | Compartilhar no WhatsApp
  • Um utilitário para implementar um sistema leve de fila de tarefas que funciona sem configuração nem daemon
  • Suporta Linux/macOS - pode ser executado em sistemas compatíveis com POSIX com suporte a flock(2)
  • Suporte a enfileiramento temporário de tarefas via linha de comando (ad-hoc queuing)
    • Adequado para tarefas sequenciais como builds com Makefile, download de arquivos e execução de benchmarks
    • Também pode ser usado como alternativa ao nohup
  • A ordem das tarefas é rigorosamente garantida por meio de sincronização baseada em timestamps em ms
    • Cria TIMESTAMP.PID para cada processo e aplica flock (bloqueio de arquivo)
  • Quando os flock anteriores são desbloqueados, a próxima tarefa é iniciada
    • Como a sincronização é feita no nível do sistema de arquivos, não é necessário polling
  • Ao adicionar uma tarefa no formato nq CMDLINE..., o ID da tarefa é exibido e ela é executada em segundo plano
    • STDOUT/STDERR são redirecionados para um arquivo de log
    • O bit de execução (+x) do arquivo de log permite distinguir visualmente o estado da tarefa
  • A extensão do nome do arquivo de log é composta pelo PID, facilitando o gerenciamento das tarefas
    • Antes da execução, usa o PID do nq; depois da execução, muda para o PID real da tarefa
    • É possível reexecutar a tarefa executando o arquivo de log como se fosse um script shell

Diferenças em relação a at, batch e task-spooler

  • at
    Ferramenta para executar tarefas em um horário especificado
    Executa comandos no horário agendado com base no relógio do sistema e é usada principalmente para tarefas agendadas pontuais
  • batch
    Executa tarefas quando a carga do sistema (load average) está baixa
    Seu objetivo é o controle de execução baseado em carga, e não agendamento, sendo gerenciado por um daemon
  • task-spooler
    Inicia automaticamente um daemon que gerencia a fila para oferecer suporte a processamento sequencial ou paralelo de tarefas
    Permite definir o número máximo de tarefas executadas simultaneamente
    É possível configurar filas diferentes por terminal, e o estado de cada fila pode ser consultado por comando
  • nq
    Funciona sem daemon e gerencia a fila apenas com flock (bloqueio de sistema de arquivos) no nível de diretório
    Não considera carga do sistema nem horário agendado; apenas garante a ordem das tarefas
    Os logs da fila podem ser acompanhados em tempo real com nqtail
    Como cada diretório funciona como uma fila independente, é possível operar várias filas separadas usando a variável de ambiente $NQDIR

2 comentários

 
rtyu1120 2025-11-11

O estilo do código é tão antigo, no estilo do Sourceforge, que eu até achei que tinha voltado no tempo kkk

 
euphcat 2025-11-11

Comparado à época do Sourceforge, eu ainda sou um desenvolvedor bem novato, então fiquei pensando “o que isso quer dizer?”. Mas quando vi a quebra de linha entre o tipo de retorno da função e o nome, acabei entendendo na hora o.o

Será que há mais algum estilo de código antigo aparecendo nesse código?