10 votes

Comment utiliser la commande run-parts ?

Pour une raison quelconque, ma crontab n'exécute pas les scripts horaires/hebdomadaires/etc scripts. Il semble que run-parts ne fonctionne pas et je n'arrive pas à le faire fonctionner sur ma machine locale. Est-ce qu'il y a une erreur dans la façon dont je l'utilise ?

fabe@fabetop ~ $ cat /home/fabe/tmp/test.sh 
#!/bin/sh
touch /home/fabe/tmp/test_it
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------  2 fabe fabe  4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x  1 fabe fabe    39 Feb 20 15:00 test.sh
fabe@fabetop ~ $ run-parts --report /home/fabe/tmp
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------  2 fabe fabe  4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x  1 fabe fabe    39 Feb 20 15:00 test.sh

22voto

Mohsin Points 11

Le problème est le nom de votre script. De man run-parts :

Si l'option --lsbsysinit ou l'option --regex ne sont pas indiquées, les noms doivent être entièrement constitués de lettres ASCII majuscules et minuscules, de chiffres ASCII, de traits de soulignement ASCII et de traits d'union ASCII.

En d'autres termes, pas d'extension. Curieusement, même avec le --lsbsysinit vous ne pouvez pas spécifier un fichier comme foo.sh car il ne correspond à aucun des espaces de noms couverts :

Si l'option --lsbsysinit est donnée, les noms ne doivent pas se terminer par .dpkg-old ou .dpkg-dist ou .dpkg-new ou . dpkg-tmp, et doivent appartenir à un ou plusieurs des espaces de noms suivants : l'espace de noms attribué par LANANA (^[a-z0-9]+$) ; les espaces de noms hiérarchiques et réservés de LSB (^_ ?([a-z0-9_.]+-)+[a-z0-9]+$) ; et l'espace de noms Debian cron script (^[a-zA-Z0-9_-]+$).

Ainsi, alors que les foo.sh ne fonctionne pas, foo.s-h o foo.-sh fonctionnera. Je n'ai aucune idée de la raison pour laquelle ils ont procédé de cette manière, mais je suppose qu'ils suivent une norme ou une autre.

Quoi qu'il en soit, vous avez 2 options, soit renommer vos scripts pour qu'ils n'aient pas d'extension (les extensions sont optionnelles dans *nix de toute façon), soit vous pouvez ne pas utiliser run-parts tout à fait. Utilisez ceci dans votre crontab au lieu de cela :

find /home/fabe/tmp/ -prune -type f -executable -exec {} \;

La commande ci-dessus trouvera tous les fichiers exécutables dans le répertoire cible et les exécutera. Je pense que la commande -executable est une extension GNU, mais vous l'avez étiqueté comme Linux, donc je suppose que vous avez GNU find.

5voto

kenorb Points 22006

Chaque script placé dans le dossier /etc/cron.hourly fonctionnerait sur une base horaire.

Quel que soit le type de dossier, il est nécessaire :

  • exécutable,
  • correspond à l'espace de noms script du cron Debian (^[a-zA-Z0-9_-]+$) .

Par exemple, si vous avez script avec l'extension ( .sh dans ce cas), cela ne fonctionnera pas.

Pour imprimer les noms des scripts qui seraient exécutés, essayez :

sudo run-parts --report --test /etc/cron.hourly

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X