exécution d'une commande toutes les heures

12

J'ai un indexeur pour sphinx, et je veux qu'il fonctionne une fois toutes les heures sous linux. Comment pourrais-je faire cela?


la source

Réponses:

14

Puisque tout le monde publie des réponses courtes, j'ai pensé que je serais un peu plus descriptif ...

cron est un démon présent sur la plupart des systèmes * nix qui exécute des commandes planifiées aux intervalles spécifiés.

Vous ajoutez un script à la liste en le copiant dans le dossier de votre choix:

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

Ces dossiers se trouvent généralement sous /etcdossier.

Nathan Osman
la source
2
Les dossiers cron. * sont très spécifiques à la distribution. crontab est le moyen universel de faire exécuter des éléments par cron à des intervalles spécifiés.
MDMarra
Vrai. Je donne juste un exemple. crontab vous donne de toute façon beaucoup plus de contrôle.
Nathan Osman
9

cron .

Cookie Monster
la source
et utilisez crontab pour éditer le fichier crontab ... voir crontabrocks.org pour une belle introduction
Doug Harris
7

Juste pour être différent -

selon vos besoins, vous pouvez utiliser la commande watch.

  watch --interval=3600 command
Bryan
la source
1
Est-ce que cela exécute la commande toutes les 1 heure; ou exécute-t-il la commande, attend 1 h, puis s'exécute à nouveau? Notez que cela fait une bonne différence si la commande prend très longtemps. (Je demande parce que ce n'était pas clair dans la page de manuel.)
Malabarba
Vraiment pas si difficile de l'essayer vous-même.
mimoralea
6

Utilisez crontab .

Pèlerin
la source
2

vous éditez le fichier cron en entrant la commande crontab -e

qui vous dépose dans un éditeur «vi» (pour Linux et FreeBSD actuels).

puis entrez ce qui suit: (tapez «i» pour l'insertion)

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

puis enregistrez et quittez (appuyez sur 'esc' puis tapez ce qui suit)

:wq
Marklark
la source
1

Avec l' utilitaire cron

Quentin
la source
1

Si vous n'en avez besoin que de temps en temps, pas de manière permanente comme vous le faites avec cron, et que la watchsolution n'est pas assez flexible, vous pouvez également utiliser un bon vieux script bash:

while true; do
   # do stuff
   sleep $[60 * 60]
done
Grumbel
la source
Cela ne fonctionnera pas comme #do Stuff s'il faut 3599 secondes pour s'exécuter, puis selon l'exigence, le script doit déclencher la seconde suivante sur les pupilles et réinitialiser l'horloge à 0, mais dans ce cas, il s'arrêtera à 3599e seconde et puis mettez-vous en veille pendant 3600 secondes. Il n'y aura pas de chevauchement mais un écart inattendu entre les itérations. Ici, je suppose que l'utilisateur essaie d'exécuter un travail toutes les heures sans cron.
mannoj