7
votes

Emplois cron - Pour courir toutes les 5 secondes

Je veux créer un travail cron qui exécute un script toutes les 5 secondes. Voyant que les travaux de cron ne permet que des incréments de minutes 0-59, etc.

Je pensais créer un autre script qui appelle mon script d'origine écrit ci-dessous. P>

#!/bin/bash

while true
do
# script in the same directory as this script. is this correct?
bash makemehappy.sh
sleep 1
done


2 commentaires

Essayer de faire quelque chose toutes les 5 secondes est vraiment la meilleure solution à votre problème?


Dupliqué possible de exécuter un cron toutes les 30 secondes


6 Réponses :


2
votes

Essayez d'utiliser Anacron ou, mieux encore, un script Init pour démarrer lorsque l'ordinateur commence.

Si vous voulez que le script "redémarre", vous devez exécuter quelque chose toutes les quelques minutes pour vérifier que l'original est toujours en marche. Cela peut être fait dans InitTAB ( / etc / inittab ) ou, sur Ubuntu, /etc/event.d . Essayez man 5 inittab , en regardant l'option "Respawn".


0 commentaires

8
votes

Je n'utiliserais pas de cron pour cela. J'utiliserais ce script Bash (utilisez un chemin absolu, sauf si vous voulez qu'il soit portable et savoir que la structure de répertoires sera préservée).

à la place, je voudrais juste 5 , comme vous l'avez fait (seulement 5 secondes au lieu de 1).

En ce qui concerne le départ avec votre système, cela dépend du système. Sur (Certaines) Distresses Linux, il y a un fichier appelé /etc/rc.local dans lequel vous pouvez ajouter des scripts à exécuter lorsque le système commence. Eh bien ... je ne devrais pas être aussi général, les distributions que j'ai utilisées ont ceci. Si vous courez Ubuntu, il n'y a plus d'inittab, ils utilisent UPSTART, BTW.

Donc, si vous avez une boucle sans fin et une entrée dans /etc/rc.local , vous devez être doré pour qu'il fonctionne pour fonctionner sans fin (ou jusqu'à ce qu'elle rencontre un problème et des sorties). < / p>


6 commentaires

Ma distribution est Ubuntu? Je n'arrive pas à trouver ce fichier rc.local dans l'annuaire ETC. suggestions?


quelle version? (chat / etc / problème)


10.04 J'ai réussi à le comprendre. :) En l'ajoutant à init.d et à mettre à jour la mise à jour-rc.d


agréable! J'espère que cela fonctionne pour vous. (Toute chance de choisir ma réponse si cela vous a aidé? n'essayez pas d'être impoli, j'essaie juste de construire mon représentant, lol)


Notez que la sommeil 5 ne garantit pas que votre code sera exécuté exactement toutes les 5 secondes, ce n'est qu'au moins 5 secondes entre exécutions ultérieures.


C'est un bon point. Si le système est sous charge lourde, il pourrait prendre un certain temps pour traiter la prochaine itération. (Ou je manque quelque chose d'autre?)



1
votes

Certains cron S ont un spécificateur d'heure @reboot (ceci couvre tous les champs de l'heure et de la date). Si vous le faites, vous pouvez l'utiliser. S'il s'agit d'un service «système» (plutôt que quelque chose qui fonctionne pour vous-même), les autres solutions ici sont probablement meilleures.


0 commentaires

1
votes

Les scripts init sont bien au démarrage, mais ne détectez pas si un processus échoue et doit être redémarré. Supervisord Est-ce qu'un excellent travail de détection de processus a échoué et de les redémarrer. Je recommanderais un script avec une boucle de 5 secondes comme @tim décrit, mais envelopper Supervisord autour de cela pour vous assurer qu'il continue à fonctionner.


0 commentaires

0
votes

Comme expliqué en détail dans Ma réponse à une question similaire , vous pouvez utiliser des unités de minuterie SystemD avec n'importe quel horaire que vous avez Vouloir - jusqu'à un calendrier théorique 1 nanoseconde sans Sleep KORDGES

Aperçu rapide:

  1. Configurez un service SystemD pour exécuter ce que vous voulez - cela peut être aussi simple que:

    /home/myusuf3/.config/systemd/user/makemehappy.service xxx

    1. Configurez une minuterie SystemD avec le calendrier que vous souhaitez, comme documenté dans man systemd.timer :

      /home/myusuf3/.config/systemd/user/makemeHappy.Timer xxx

      1. Activer et démarrer la minuterie:

        : xxx

        (après l'activer, il sera automatiquement automatique à chaque démarrage de l'ordinateur, mais vous voulez probablement le démarrer maintenant de toute façon).


0 commentaires

0
votes

Pour répondre à la question dans le titre, voici comment exécuter un cronjob toutes les 5 secondes: xxx

Ce n'est pas beau, mais cette solution est livrée sans outils supplémentaires ni dépendances. Donc, si vous travaillez des emplois cron, cela devrait travailler tout de suite.


0 commentaires