Crontab pas l'exécution de script bash
Je suis très très rarement l'utilisation de Linux et donc ne pas avoir d'expérience avec les scripts bash et des tâches cron.
C'est en fait ma première tentative. Donc c'est probablement quelque chose de vraiment simple à corriger.
J'ai le texte suivant:
/etc/cron.d/clear-mixtape-dir.sh
les autorisations sont: 644
#!/bin/bash
# Clears the /tmp/mixtape2 directory
rm -rf "/tmp/mixtape2/"*
Mon fichier crontab ressemble à ceci:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
*/15 * * * * /etc/cron.d/clear-mixtape-dir.sh >/dev/null 2>&1
Je suis en train d'exécuter l' .sh script toutes les 15 minutes.
Tout ce que j'ai trouvé dit que cela devrait fonctionner, mais il ne le fait pas.
Ne fait rien comme les autorisations de fichier (sur les fichiers dans /tmp/mixtape2/) d'importance dans ce cas?
Ou peut-être les autorisations définies sur le réel .sh script - peut-être qu'ils ont besoin de réglage de l'exécutable?
Des conseils appréciés.
Ajouter
/bin/bash
dans votre ligne: */15 * * * * /bin/bash /etc/cron.d/clear-mixtape-dir.sh >/dev/null 2>&1
Les autorisations ne devrait jamais être mis en 777. Dans ce cas, les autorisations sur le script doit être en 755, et les permissions sur /tmp/mixtape2/ besoin pour permettre l'écriture de l'utilisateur qui exécute la tâche cron.
a noté gordon, merci beaucoup pour me rappeler à l'vicieux 777 , mes excuses
Mieux encore, les autorisations de 700 et assurez-vous que le propriétaire est
root
. Sauf si vous le souhaitez exécuter en tant qu'un autre utilisateur, puis modifiez la propriété de façon appropriée, et il reste 700, puis mettre à jour votre cron
définition d'exécuter le script en tant qu'utilisateur.
OriginalL'auteur Barry Jarvis | 2013-04-25
Vous devez vous connecter pour publier un commentaire.
Remarque: Ces commentaires voir /etc/crontab.
Avant de faire quelque chose d'autre, qui cron que vous accédez
crontab -e
ouSi vous utilisez la commande " crontab-e, aucun utilisateur n'champ existe dans cette forme de crontab. Qui pourrait être pourquoi vous n'êtes pas en cours d'exécution.
Dans votre exemple, votre champ utilisateur est *. Je voudrais faire root ou un utilisateur disposant des autorisations appropriées.
Avant l'exécution de ce programme, je voudrais faire un mannequin entrée crontab qui ne vient
echo "Bonjour" et s'exécute à chaque minute. Obtenir que cela fonctionne sur tout ce qui a jamais crontab vous êtes d'édition (crontab -e ou vim /etc/crontab). Puis en utilisant comme modèle, obtenir votre script à exécuter.
Prochaine, voir si cron est en cours d'exécution:
ps -ef | grep cron
Si elle n'est pas en cours d'exécution, devenez root et de commencer par entrer
/etc/init.d/cron start
(Ubuntu et Red Hat).Vous avez déjà une bonne réponse vous suggère d'ajouter l'utilisateur root à l'utilisateur en raison d'un problème d'autorisations. Je vais proposer plus de choses à vous aider à déboguer. J'ai couru dans beaucoup de cron problèmes au fil des ans.
1) Définir un e-mail à une adresse connue, à moins que vous n'aura de cesse de surveiller la racine de l'e-mail
2) Jusqu'à ce que tout fonctionne correctement, prendre la
>/dev/null 2>&1
de votre entrée cron, qui permet de consulter les sorties dans votre e-mail généré après l'exécution du script.3) Bosse
*/15
à un intervalle de plus qu'il n'en faut exécuter le script -- likr*/5
, de sorte que le script s'exécute le plus souvent.4) je ne connais pas la raison exacte, mais les scripts, je reçois le cron avez à mettre en place leurs propres environnements en dépit d'être exécuter en tant qu'utilisateur dans cron. Cela peut inclure des mesures de
cd /home/script-owner
et en cours d'exécutionsource .bashrc
et de l'appel de script(s) de définir des variables d'environnement.>/dev/null 2>&1
mais toujours pas de chance. Je reçois pas d'e-mails grâce à tous les. Donc il ne ressemble pas à la crontab est même l'exécution? Toutes les idées sur ce que c'est? Une chose que je n'ai pas fait est de votre étape 4... comme tout à fait franchement, je suis trop nouveau pour tout cela, pour savoir ce que l'enfer tout cela 😉J'ai édité l'original de la réplique d'inclure davantage d'informations. Regardez KeithThompson commentaire dans la réponse à la iamauser. Qui décrit les deux crontab types d'entrée.
C'est une explication exhaustive, @octopusgrabbus. Doivent être conservés quelque part, comme stackoverflow.com/tags/crontab/info pour être accessible à l'utilisateur d'essayer de déboguer leurs crontab!
Un simple script cron -- echo "Bonjour", à moins de vider vos problèmes de format. À partir de là, vous pouvez entrer dans les problèmes liés au script. @BarryJarvis
OriginalL'auteur octopusgrabbus
Supprimer le .sh extension du script de la
/etc/cron.d
et il sera appelé.run-parts
ignore les fichiers avec une période dans le nom, donc l' .extension sh est de prévenir votre script d'exécution.De
man cron
-OriginalL'auteur Chris Burgess
Ajouter un utilisateur
root
car votre autorisation semble être seulement pour l'utilisateur root.crontab
. Dans un crontab système, une ligne est constituée de 5 champs pour le moment, une pour le nom du compte d'exécution du travail, et le reste de la commande. Dans un crontab, le type manipulé avec lecrontab
de commande, le nom d'utilisateur n'est pas spécifié -- et si vous ne le spécifiez, il sera considéré comme faisant partie du nom de la commande. (Le travail sera exécuté par tout ce qui compte a couru lecrontab
de commande.) Commandes à exécuter par l'utilisateur root peut être installé comme système crontabs ou par l'exécution de l'crontab
commande à partir du compte root.OriginalL'auteur iamauser