32 votes

Désactiver de manière robuste certains cron.{heures, jours, semaines} script.

Sur les différents systèmes que j'administre, il y a des cron scripts qui sont exécutés via l'utilitaire communément appelé /etc/cron.{hourly,daily,weekly} disposition. Ce que je veux savoir, c'est s'il existe une fonctionnalité commune de "désactivation de ce script".

De toute évidence, il suffit de supprimer un élément d'un répertoire donné pour le désactiver, mais je cherche une solution plus permanente. Suppression de /etc/cron.daily/slocate fonctionnera pour désactiver le programme nocturne updatedb sur mon ordinateur personnel (où je n'utilise jamais slocate ), mais la prochaine fois que je mettrai à jour le paquet slocate, je suis presque sûr qu'il réapparaîtra.

Les deux distributions qui m'intéressent le plus sont Gentoo et OpenSUSE, mais j'espère qu'il existe un mécanisme largement implémenté. Les deux distributions telles que je les ai utilisées utilisent vixie-cron (je ne suis pas sûr que cela soit important).

1voto

Anicho Points 894

Le /etc/cron.daily et. al. scripts sont exécutés par un scripts appelé run-parts. Ce scripts varie. Par exemple, le commutateur --test mentionné ci-dessus n'est pas sur la machine que j'utilise à cet instant.

Run-parts est un bash script. C'est un outil généralement utile pour exécuter tous les script dans le répertoire qui lui est donné en argument. Il se trouve généralement à /usr/bin/run-parts.

Il a un enchevêtrement de logique pour décider de ce qu'il faut exécuter. Ce code contient la réponse à votre question, mais il varie aussi. Vous devez donc lire le code pour être sûr.

Dans la version que je regarde, il a une logique qui, lorsqu'il travaille sur le répertoire <foo>, vérifie l'existence de <foo>/jobs.deny. Si cela existe, il refuse d'exécuter tout script qui est mentionné dans ce fichier sur une ligne, seul. En supposant que vous ayez cette fonctionnalité, c'est génial car elle continuera à fonctionner lorsque le paquet qui l'installe sera installé ou mis à jour.

1voto

shodanshok Points 42743

S'il s'agit de RHEL et de ses dérivés (qui fournissent l'environnement de travail de la crontabs ), vous pouvez explicitement désactiver une tâche en plaçant son nom dans le champ jobs.deny fichier.

De page de manuel crontabs / run-parts :

L'exécution des fichiers peut être autorisée ou refusée en créant le fichier jobs.allow ou jobs.deny qui fonctionnent de la même manière que les autres fichiers d'autorisation et de refus. de configuration. Le fichier doit être créé dans le répertoire spécifié.

Exemple /etc/cron.daily/jobs.deny pourrait contenir par exemple 0logwatch qui interdit l'exécution de ce script.

-1voto

jishi Points 838

Si vous ne voulez pas non plus des user-crontabs, désactivez simplement crond dans votre liste de services.

Dans Debian et les versions basées sur Debian, il s'agit simplement de supprimer le lien symbolique du fichier /etc/rcX.d approprié (pour le niveau d'exécution X).

Je ne sais pas comment vous gérez les services dans SUSE ou Gentoo.

4 votes

C'est une mauvaise idée. Désactiver complètement cron désactivera des tâches de maintenance utiles comme logrotate, updatedb, éventuellement des mises à jour sans surveillance et des sauvegardes standard.

0 votes

Updatedb est exactement la tâche que j'essaie de désactiver (met à jour la base de données pour slocate). Néanmoins, oui, c'est un mauvais conseil en général.

0 votes

Oh, désolé. J'ai mal lu votre question et je pensais que vous vouliez désactiver TOUS les cronjobs spécifiques au système, et non pas un seul.

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