haciendo que un comando se ejecute una vez cada hora

12

Tengo un indexador para sphinx, y quiero que se ejecute una vez cada hora en Linux. ¿Cómo haría esto?


fuente

Respuestas:

14

Como todos los demás publican respuestas cortas, pensé que sería un poco más descriptivo ...

cron es un demonio que se encuentra en la mayoría de los sistemas * nix que ejecuta comandos programados en los intervalos especificados.

Agregue un script a la lista copiándolo en la carpeta que elija:

  • cron.daily
  • cron.hora
  • cron.mesthly
  • cron.semanalmente

Estas carpetas se encuentran generalmente en la /etccarpeta.

Nathan Osman
fuente
2
Las carpetas cron. * son muy específicas de la distribución. crontab es la forma universal de tener elementos ejecutados por cron a intervalos específicos.
MDMarra
Cierto. Solo estoy dando un ejemplo. crontab te da mucho más control de todos modos.
Nathan Osman
9

cron .

Monstruo de las galletas
fuente
y use crontab para editar el archivo crontab ... vea crontabrocks.org para una buena introducción
Doug Harris
7

Solo para ser diferente

dependiendo de sus necesidades, puede usar el comando watch.

  watch --interval=3600 command
Bryan
fuente
1
¿Esto ejecuta el comando cada 1 hora; o ejecuta el comando, espera 1 hora y luego vuelve a ejecutarlo? Tenga en cuenta que hace una buena diferencia si el comando tarda mucho. (Pregunto porque no estaba claro en la página del manual).
Malabarba
Realmente no es tan difícil probarlo usted mismo.
mimoralea
2

editará el archivo cron ingresando el comando crontab -e

que lo coloca en un editor 'vi' (para Linux y FreeBSD actuales).

luego ingrese lo siguiente: (escriba 'i' para la inserción)

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

luego guarde y salga (presione 'esc' y luego escriba lo siguiente)

:wq
Marklark
fuente
1

Si solo lo necesita de vez en cuando, no de forma permanente como lo hace cron, y la watchsolución no es lo suficientemente flexible, también puede usar buenas secuencias de comandos bash antiguas:

while true; do
   # do stuff
   sleep $[60 * 60]
done
Grumbel
fuente
Esto no funcionará como #do Stuff si tarda 3599 segundos en ejecutarse y luego, de acuerdo con el requisito, el script debe activar el siguiente segundo en las salas y restablecer el reloj a 0, pero en este caso se detendrá en 3599 segundos y luego proceda a dormir durante los siguientes 3600 segundos. No habrá una superposición sino una brecha inesperada entre las iteraciones. Aquí supongo que el usuario está intentando ejecutar un trabajo cada hora sin cron.
mannoj