executando um comando uma vez a cada hora

12

Eu tenho um indexador para sphinx, e eu quero que ele seja executado uma vez a cada hora no linux. Como eu faria isso?


fonte

Respostas:

14

Como todo mundo está postando respostas curtas, achei que seria um pouco mais descritivo ...

cron é um daemon encontrado na maioria dos sistemas * nix que executa comandos agendados nos intervalos especificados.

Você adiciona um script à lista, copiando-o para a pasta de sua escolha:

  • cron.daily
  • cron.hourly
  • cron.monthly
  • cron.weekly

Essas pastas são normalmente encontradas na /etcpasta.

Nathan Osman
fonte
2
As pastas cron. * são muito específicas para distribuição. O crontab é a maneira universal de executar itens pelo cron em intervalos especificados.
MDMarra 9/05
Verdade. Estou apenas dando um exemplo. De qualquer forma, o crontab oferece muito mais controle.
Nathan Osman
9

cron .

Cookie Monster
fonte
e use o crontab para editar o arquivo crontab ... veja crontabrocks.org para uma introdução agradável
Doug Harris
7

Apenas para ser diferente -

dependendo de suas necessidades, você pode usar o comando watch.

  watch --interval=3600 command
bryan
fonte
1
Isso executa o comando a cada 1 hora; ou ele executa o comando, aguarde 1h e, em seguida, execute novamente? Observe que faz uma boa diferença se o comando demorar muito. (Eu pergunto porque não ficou claro a partir da página man.)
Malabarba
Realmente não é tão difícil de experimentar você mesmo.
mimoralea
6

Use crontab .

Peregrino
fonte
2

você editará o arquivo cron digitando o comando crontab -e

que o leva a um editor 'vi' (para Linux e FreeBSD atuais).

em seguida, digite o seguinte: (digite 'i' para inserção)

00 * * * * /path/to/sphinx_indexer.exe

salve e saia (pressione 'esc' e digite o seguinte)

:wq
marklark
fonte
1

Com o utilitário cron

Quentin
fonte
1

É para isso que serve o cron .

Michael Borgwardt
fonte
1

Se você precisar apenas de vez em quando, e não permanentemente como você está cron, e a watchsolução não for suficientemente flexível, você também poderá usar os bons e antigos scripts do bash:

while true; do
   # do stuff
   sleep $[60 * 60]
done
Grumbel
fonte
Isso não funcionará como o #do Stuff, se demorar 3599 segundos para ser executado e, de acordo com o requisito, o script precisará acionar o próximo segundo nas alas e redefinir o relógio para 0, mas, neste caso, fará uma pausa no 3599º segundo e em seguida, continue no modo de espera pelos próximos 3600 segundos. Não haverá sobreposição, mas uma lacuna inesperada entre as iterações. Aqui eu acho que o usuário está tentando executar um trabalho a cada hora sem cron.
mannoj