Comment exécuter périodiquement une commande avec un intervalle très court et obtenir le retour?

12

Je dois appeler une commande spécifique dans un intervalle d'environ 5 secondes. Comment configurer un démon / processus fonctionnant en arrière-plan ou quelque chose de similaire pour le faire? J'ai regardé les cronjobs, mais l'intervalle minimum semble être de 1 minute. Tout conseil est apprécié;)

Fedora est le système.

EDITER la commande serait un bashscript, donc "watch" ne le ferait pas je pense.

Hans
la source

Réponses:

10
(
  while true
  do
    your-command-here
    sleep 5
  done
) &
disown
Juliano
la source
pourquoi est-il renié? Et si je courais sans?
Hans
@Marcel, disownsupprime le dernier travail de la table des travaux du shell, ce qui en fait une sorte de démon, comme vous l'avez demandé. Ce n'est pas un véritable démon car il est toujours attaché au terminal et se trouve dans le même groupe de processus, mais il continuera à fonctionner après la fermeture du shell.
Juliano
très bien, cela fonctionnerait: D Juste pour la curiosité, comment "créer" un démon?
Hans
@Marcel le moyen le plus simple est d'appeler le démon (3) depuis C ou un autre langage avec accès à la bibliothèque (pas depuis un script shell). C'est la voie difficile .
Juliano
14

Pourquoi pensez-vous que «regarder» ne fonctionnera pas?

$ cat periodic.sh
#!/bin/bash
echo $(date)
$ chmod +x periodic.sh

$ watch -n 5 ./periodic.sh
naufraghi
la source
et si je me déconnecte? le script doit continuer à s'exécuter.
Hans
Il s'arrêtera, mais vous pouvez utiliser nohup watch -n 5 ./periodic.sh > periodic.log &et stocker la sortie.
naufraghi
pour la tuyauterie, utilisez la citation '' car la commande "est donnée à" sh -c ", ce qui signifie que vous devrez peut-être utiliser des guillemets supplémentaires pour obtenir l'effet souhaité"
andrej
2

Peut-être avec nohup? Il est conçu pour permettre l'exécution d'un travail après la fermeture du shell.

Vous pouvez également utiliser des écrans.

Christopher Mahan
la source
0

La watchcommande est appropriée dans votre cas, j'utiliserais un multiplexeur de terminal (par exemple tmux, écran, etc.), puis exécuter la commande en utilisant

watch -n 5 ./script.sh

Dans ce cas, même si vous fermez le terminal ou la connexion ssh à la machine, le script sera toujours en cours d'exécution.

La seule limitation de cette approche est que le script ne s'exécutera toutes les 5 secondes que s'il a terminé son exécution dans cet intervalle de temps.

JimS
la source
Étant donné que le PO a explicitement déclaré qu'à son avis, watchil ne le ferait pas, veuillez expliquer pourquoi votre réponse dépasse cette limite ou à quel point vous pensez que le PO s'est trompé sur le fait watchqu'il ne convenait pas à la tâche.
AdminBee