bonjour
j'utilise régulièrement l'utilitaire watch -n XX ./script pour lancer des scripts à répétition, pour des "taches à faible valeur ajoutée", comme certains aiment les appeler.
je lance donc un watch -n 60 ./script pour faire lancer chaque minute un script qui effectuera une meme manip durant une demie minute. Et chaque minute, watch relance l'ordi sur ce script, etc… ce qui est fort pratique
la problématique, c'est que l'ordi dédié à cela, a tendance à voir son controle distant (anydesk ou nomachine) "bloqué" lorsque le script se déroule pendant plusieurs heures : l'interface de mint (debian) ne réagit plus aux clavier/souris. Je peux le redémarrer à distance via ssh, mais je préférerais quelque chose qui me permette, si possible avec watch, d'effectuer ceci :
watch -n 60 -m 500 ./script
où le script s'exécute toutes les 60 secondes, pour une durée max de 500 secondes, ou pour un total de 500 exécutions. le -m en fin de paramètres ici est fictif à titre d'exemple : je trouve pas de telle option sur le logiciel, mais j'imagine qu'il doit y avoir un truc simple pour dire à watch (dont j'ai compris qu'il sert à faire tourner en boucle une action) de faire son travail, délimité sur ue période déterminée, ou d'un nombre d'essais aussi déterminé, de manière à ce que ce soit pas un truc infini, quitte à le relancer par la suite.
il y a quelques années, on m'avait dit qu'en électronique cela s'appelait watchdog (chien de garde), aka le logiciel (ou la puce) qui va dire au logiciel, après tel délai, ou décompte, "stop" et ca s'arrete.
y a t-il la possibilité de faire une telle réalisation avec watch?
merci :)
# Commande timeout
Posté par amden (site web personnel) . Évalué à 3. Dernière modification le 15 août 2023 à 13:51.
Pour le timeout, tu peux utiliser la commande du même nom.
Par contre, pour limiter sur le nombre d'exécutions, il te faudra probablement un script et enregistrer le nombre d'exécutions dans un fichier ou en mémoire.
Edit : Apparemment, il y a le paramètre
-q
dewatch
permet de sortir après un certain nombre de cycles.[^] # Re: Commande timeout
Posté par BAud (site web personnel) . Évalué à 3.
cela requière au minimum la version 4.0.1 de
procps-ng
d'aprèshttps://gitlab.com/procps-ng/procps/-/blob/master/NEWS
o_O le fichier de NEWS n'indique que la version, pas la date de sortie :/
toutes les distributions n'intègrent pas encore cette version d'après
https://repology.org/project/procps-ng/versions
la page de man a été actualisée d'après le git sur
https://www.man7.org/linux/man-pages/man1/watch.1.html
(tous les sites affichant les man pages n'indiquent pas forcément la dernière version)
# mauvais outil?
Posté par wismerhill . Évalué à 9.
Pour exécuter une commande à intervalle régulier, le bon outil est cron.
S'il est important de pouvoir limiter le nombre d'exécution, tout en se prémunissant des déconnexions, alors il faut lancer la commande dans une session screen ou tmux.
[^] # Re: mauvais outil?
Posté par feth . Évalué à 8.
La manière moderne serait probablement de se reposer sur un service systemd (mais je n'ai pas essayé), qui propose Restart=always et RuntimeMaxSec=30. Et journalctl -f -u "nom_de_l'unité" pour lire ce qui se passe.
https://www.freedesktop.org/software/systemd/man/systemd.service.html
# commande timeout
Posté par jigso . Évalué à 2. Dernière modification le 17 août 2023 à 06:11.
man timeout
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.