Executando um trabalho em segundo plano no bash

2

Eu gostaria de executar um comando no bash a cada 30 segundos e executá-lo como um job em background. Formulário este post , eu entendo que usar o relógio comando é útil. No entanto, toda vez que eu tento fazer isso, ele pára.

watch -n 1 'date >> dateFile.txt'

funciona. Eu posso cat dateFilet.txt e ver um monte de linhas.

watch -n 1 'date >> dateFile.txt' &

retorna

[1]+ Stopped watch -n 1 'date >> dateFile.txt'

executar bg retorna a mesma linha novamente.

O que estou fazendo de errado? Como faço para corrigir isso? O que eu eventualmente quero fazer é criar um arquivo a cada minuto para manter certas variáveis em minha sessão bash atualizadas.

    
por Lord Loh. 05.11.2014 / 19:29

3 respostas

4

No bash, você pode fazer isso facilmente usando a variável PROMPT_COMMAND (de man bash ):

PROMPT_COMMAND

If set, the value is executed as a command prior to issuing each primary prompt.

Então, se você adicionar algo assim ao seu ~/.bashrc :

PROMPT_COMMAND=". /path/to/file"

Você terá todas as variáveis definidas nesse arquivo disponíveis.

    
por 05.11.2014 / 20:39
3

No seu crontab :

* * * * * date >> dateFile.txt & sleep 30; date >> dateFile.txt &

Simples, não? =)

(melhor colocar o caminho completo do comando date )

Outra solução:

while true; do date >> dateFile.txt & sleep 30; done
    
por 05.11.2014 / 19:32
3

What I eventually want to do is source a file every minute or so to keep certain variables in my bash session up to date.

  • Você não pode fazer isso em um processo filho.
  • Você não pode fazer isso em um processo pai.
  • Você não pode fazer isso de qualquer processo diferente daquele que deseja afetar.

Alterar o ambiente de um processo é o mesmo que alterar a memória privada de um processo (na verdade, é exatamente isso que estaria envolvido). Absolutamente não permitido! É por isso que IPC é um domínio tão elaborado.

    
por 05.11.2014 / 19:56