Como executo periodicamente um comando com intervalo muito curto e obtenho o retorno?

12

Preciso chamar um comando específico em um intervalo de cerca de 5 segundos. Como eu configuraria um daemon / processo em execução em segundo plano ou algo semelhante para fazer isso? Eu olhei para cronjobs, mas o intervalo mínimo parece ser de 1 minuto. Qualquer conselho é apreciado;)

O Fedora é o sistema.

EDITAR o comando seria um bashscript, então "watch" não faria isso, eu acho.

Hans
fonte

Respostas:

10
(
  while true
  do
    your-command-here
    sleep 5
  done
) &
disown
Juliano
fonte
para que é negado? e se eu correr sem ele?
Hans
O @Marcel disownremove o último trabalho da tabela de trabalhos do shell, tornando-o uma espécie de daemon, como você pediu. Não é um daemon real porque ainda está conectado ao terminal e está no mesmo grupo de processos, mas continuará sendo executado após o fechamento do shell.
Juliano
tudo bem, ótimo, isso funcionaria: D Só por curiosidade, como eu "faria" um daemon?
Hans
O @Marcel é uma maneira simples de chamar o daemon (3) de C ou outro idioma com acesso à biblioteca (não de um script de shell). Esta é a maneira mais difícil .
Juliano
14

Por que você acha que 'watch' não vai funcionar?

$ cat periodic.sh
#!/bin/bash
echo $(date)
$ chmod +x periodic.sh

$ watch -n 5 ./periodic.sh
naufraghi
fonte
e se eu sair? o script deve continuar em execução.
Hans
Ele irá parar, mas você pode usar nohup watch -n 5 ./periodic.sh > periodic.log &e armazenar a saída.
precisa saber é o seguinte
para a tubulação, use o '' citar porque o comando "é fornecido para" sh -c ", o que significa que você pode precisar usar citação extra para obter o efeito desejado"
andrej
2

Talvez com nohup? Ele foi projetado para permitir que um trabalho seja executado após o fechamento do shell.

Você também pode usar telas.

Christopher Mahan
fonte
0

O watchcomando é apropriado no seu caso, eu usaria um multiplexador de terminal (por exemplo, tmux, screen etc.) e executaria o comando usando

watch -n 5 ./script.sh

Nesse caso, mesmo se você fechar a conexão do terminal ou ssh à máquina, o script ainda estará em execução.

A única limitação dessa abordagem é que o script será executado a cada 5 segundos apenas se tiver concluído sua execução dentro desse intervalo de tempo.

JimS
fonte
Como o OP afirmou explicitamente que, na sua opinião watch, não faria isso, explique por que sua resposta supera essa limitação ou em que momento você acha que o OP estava enganado por watchser inadequado para a tarefa.
precisa saber é o seguinte