Comment exécuter une commande toutes les 10 secondes (sans cron)?

36

Quand j'exécute, cronj'obtiens cette faute

cron: impossible d'ouvrir ou de créer /var/run/crond.pid: autorisation refusée

Alors, comment le faire sans cron?

PS je veux vérifier si le fichier dans svn a changé et j'ai un script spécial pour cela.

UAdapter
la source
Si vous n'avez pas la permission, essayez alors de lancer cron avec sudo.
Anonyme
4
Gardez à l'esprit que cron ne fera pas quelque chose toutes les 10 secondes, le plus granulaire obtenu est une fois par minute.
Cesium
Si vous voulez faire des tâches cron, vous devez vous lancer crontab -epour lancer l'éditeur. Pour lister les crons actuels, lancezcrontab -l
Lekensteyn
@Anonymous Je ne connais pas le mot de passe root, donc sudo ne m'aidera pas.
UAdapter

Réponses:

59

Pour accéder à votre cronconfiguration personnelle , vous devez utiliser la commande crontab -e(pour éditer votre table cron).

Alternative est la watchcommande:

watch -n10 command args

Enfin, pour surveiller les événements du système de fichiers de manière plus efficace, vous pouvez utiliser inotifywait, du inotify-toolspaquet.

enzotib
la source
1
Il vaut la peine de noter que vous feriez peut-être mieux de mettre vos commandes entre guillemets, sinon vous obtiendrez des résultats inattendus. watch -n<timeout> "command(s) arg(s)"commewatch -n2 "ps ux | grep ss5"
Achilles
J'ai eu du mal à watchaccepter des commandes longues et compliquées utilisant des tubes et des guillemets. La boucle while ci-dessous a fonctionné, mais bien sûr, il faut toujours dormir en premier pour éviter les fugueurs.
rjurney
@rjurney: il devrait suffire d'envelopper la commande entière entre guillemets, simple ou mieux double:watch -n10 "ls -l | grep $foo"
enzotib
@enzotib Le problème vient quand il y a des guillemets dans les commandes, comme des guillemets dans des guillemets dans (aidez-moi), les approches de citations sont impossibles à bash. En théorie, cela devrait être possible, mais je réalise rarement des citations imbriquées en bash sans abandonner et emprunter un autre chemin.
rjurney
32

Vous pouvez écrire un script shell qui a sleepune boucle while.

#!/bin/sh
while [ true ]
do
    sh special_svn_script.sh
    sleep 10
done
Anonyme
la source
5
while truepas besoin de brakets carrés, sinon "vrai" est interprété comme une chaîne, et chaque chaîne vaut "vrai".
enzotib
1
@enzotib donc vous pourriez aussi bien écrire autour de vous
Eduard Florinescu
Bien que cela fonctionne, vous devez toujours commencer par dormir, car quelque chose peut empêcher l’atteinte de l’étape du sommeil, auquel cas vous avez un pid fugitif inondant quelque chose.
rjurney
4

gnome-schedule (cliquez sur le bouton pourInstall now!utiliser votre centre de logiciels)
est une interface utilisateur graphique qui exploite la puissance de vixie-cron, dcron et à pour gérer votre fichier crontab et fournit un moyen simple de planifier des tâches sur votre ordinateur. Il prend en charge les tâches récurrentes (périodiques) et les tâches ne se produisant qu'une seule fois dans le futur. Il est écrit en Python avec pygtk.

Caractéristiques impressionnantes

  • Prend en charge les titres et les icônes personnalisés pour vos tâches afin qu’ils soient plus faciles à suivre.
  • Prise en charge des modèles afin que vous n'ayez pas à créer la même tâche encore et encore; ceux-ci sont enregistrés dans gconf et peuvent facilement les envoyer avec, par exemple, une distribution Linux
  • S'il est exécuté en tant que root, vous pouvez éditer les tâches crontab et "at" de n'importe quel utilisateur.
  • Chaînes lisibles par l'homme telles que "Toutes les heures" au lieu de "0 * * * *"
  • Mode avancé pour les experts crontab
  • Fournit une "applet de panneau" où vous pouvez gérer des tâches à partir d'un menu déroulant
  • Expressions courantes prédéfinies telles que: chaque minute, chaque semaine, demain, la semaine prochaine Un calendrier vous permet de choisir le jour d'exécution d'une tâche.
hhlp
la source