8 votes

La crontab racine ne s'enregistre pas

J'essaie d'ajouter une entrée crontab à la crontab de mon utilisateur root. Je suis en mesure d'ajouter une entrée sans problème à la crontab de mon utilisateur normal, mais lorsque je su à l'utilisateur Root et essayez d'ajouter une entrée crontab, mais l'entrée n'est pas enregistrée.

Le processus que je suis en train de suivre est :

$sudo su
$crontab -e
# write out my crontab entry and then :wq to write and quit vi
$crontab -l
crontab: no crontab for root

J'ai également essayé de quitter vi en utilisant wq! et il n'enregistre toujours pas l'entrée.

L'entrée à laquelle je participe est :

* * * * * /sayhi.sh

sayhi.sh est un simple shell script que j'utilise pour essayer de vérifier que la tâche cron est en cours d'exécution.

Y a-t-il quelque chose de différent à faire si j'essaie de créer une entrée crontab pour Root ? J'ai cherché un peu partout et je n'ai rien vu dans la crontab qui soit spécifique à l'utilisateur Root.

Toute aide serait appréciée !

7voto

Tony Williams Points 11219

Vos commandes devraient en fait fonctionner, mais ce n'est pas comme je le ferais.

Essayez plutôt :-

sudo crontab -e -u root

puis à la liste :-

sudo crontab -l -u root

En règle générale, je me donne beaucoup de mal pour jamais exécuter un shell Root. Lorsque je le fais, j'utilise sudo -s plutôt que sudo su .

Lorsque vous quittez vi, vous devriez voir deux lignes :-.

crontab: no crontab for root - using an empty one
crontab: installing new crontab

Si vous n'avez pas ces deux lignes, vous avez de sérieux problèmes. Si vous les obtenez et que la commande list ne montre rien, je soupçonne des problèmes de permission.

Je n'utiliserais pas non plus votre ligne d'exemple car vous demandez au système d'exécuter "sayhi.sh" une fois par minute, toute la journée, tous les jours. Je m'interroge également sur le chemin "/sayhi.sh" - avez-vous vraiment le script tout en haut de votre disque de démarrage ? Ce n'est pas une bonne idée non plus ou peut-être voulez-vous dire "~/sayhi.sh" qui, dans ce cas, serait dans le répertoire personnel des racines (habituellement /var/Root) ou voulez-vous dire votre répertoire personnel. Dans les fichiers crontab, il est préférable de coder explicitement le chemin complet, quel qu'il soit.

Vous devez également savoir que les résultats de la tâche cron ne seront pas envoyés à un terminal mais seront envoyés par courriel à Root (par défaut).

Si vous voulez vérifier que cron exécute des tâches, un simple

*/5 * * * *   echo "CRON" > /Users/myname/.cronout

le fera (le premier champ exécute la tâche toutes les 5 minutes, ce qui est beaucoup plus raisonnable).

Les crontabs eux-mêmes sont stockés dans /usr/lib/cron/tabs. /usr/lib/cron est en fait un lien vers /var/at et si vous y allez, vous trouverez le tabs et aussi le répertoire cron.deny fichier. Vérifiez que personne n'a ajouté Root à ce fichier et si vous n'avez toujours aucune chance, vous pouvez essayer :

echo > /var/at/tabs/root

ce qui devrait créer un fichier vide que vous pourrez ensuite modifier.

1voto

J'avais le même problème. Voici ce qui a fonctionné pour moi (et par "fonctionné", je veux dire que j'ai réussi à faire fonctionner une tâche cron en tant que Root) :

sudo bash -login            # su always tries to force me to change my password >:[
vi /usr/lib/cron/tabs/root  # Just edit it directly

chmod 600 /usr/lib/cron/tabs/root

Les travaux que vous y mettez seront exécutés, mais crontab -e ne fonctionne toujours pas, même après avoir créé la crontab.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X