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.

Respostas:


10
(
  while true
  do
    your-command-here
    sleep 5
  done
) &
disown

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

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.