Crontab ne fonctionne pas, et quelques questions plus crontab

J'ai essayé d'exécuter un script chaque minute en utilisant crontab mais il ne fonctionnera pas. Le code que je mets dedans est:

* * * * * ~/me/folder/myScript.sh

Je me suis dit que la destination était fausse, alors j'ai aussi essayé:

* * * * * home/me/folder/myScript.sh

Je suis très nouveau avec bash donc je suis un peu désemparé quel pourrait être le problème. J'ai essayé pgrep cron pour m'assurer que j'avais cron en cours d'exécution.

0
ajouté édité
Vues: 1
Que se passe-t-il lorsque vous exécutez la commande à partir d'une invite du shell?
ajouté l'auteur Keith Thompson, source
Ce n'est pas le problème, je me suis assuré que c'est exécutable
ajouté l'auteur Benji, source
Le script s'exécute comme il se doit.
ajouté l'auteur Benji, source

2 Réponses

Le répertoire courant lors de l'exécution de votre crontab est votre répertoire personnel, vous n'avez donc pas besoin de lui indiquer un chemin explicite.

* * * * * folder1/folder2/folder3/myScript.sh >>myScript.log 2>&1

Mais si vous voulez cela, vous devez en faire un chemin absolu:

* * * * * /home/me/folder1/folder2/folder3/myScript.sh >>/home/me/myScript.log 2>&1
0
ajouté
Y a-t-il des messages dans syslog de CRON à ce sujet?
ajouté l'auteur Barmar, source
grep CRON/var/log/syslog
ajouté l'auteur Barmar, source
Donc, votre script est en cours d'exécution, mais il y a une erreur. Normalement, cron vous enverra la sortie, mais comme le courrier n'est pas configuré sur votre machine, il n'est pas capable de le faire. Je mettrai à jour ma réponse pour montrer comment vous pouvez mettre la sortie dans un fichier.
ajouté l'auteur Barmar, source
Si le script fonctionne lorsque vous l'exécutez de manière interactive, l'erreur est probablement due au fait que cela dépend de certaines variables d'environnement que vous avez définies dans votre .profile . Ceci n'est pas exécuté lors de l'exécution de tâches cron.
ajouté l'auteur Barmar, source
Il vous manque le / avant home . Comprenez-vous la différence entre les chemins absolus et relatifs?
ajouté l'auteur Barmar, source
Que se passe-t-il si vous tapez ls /home/user/folder1/myScript.sh ? Assurez-vous de copier exactement ce que vous avez mis dans la crontab.
ajouté l'auteur Barmar, source
Cela ne fonctionne pas dans l'un ou l'autre des chemins
ajouté l'auteur Benji, source
Où puis-je voir cela? Je ne reçois aucune erreur après la mise à jour de mon crontab -e , il dit juste qu'il a été mis à jour.
ajouté l'auteur Benji, source
Ces deux messages sont affichés chaque minute: Nov 22 18:03:01 utilisateur CRON [22352]: (utilisateur) CMD (home/utilisateur/dossier1/dossier2/dossier3/myScript.sh) Nov 22 18:03:01 utilisateur CRON [ 22351]: (CRON) info (aucun MTA n'est installé, rejetant la sortie)
ajouté l'auteur Benji, source
/bin/sh: 1: home/utilisateur/dossier1/monScript.sh: non trouvé Ceci est le message d'erreur que j'ai reçu dans le journal. J'ai changé de dossier pour le rendre un peu plus facile.
ajouté l'auteur Benji, source
J'ai remarqué que aussi bien que je l'ai réparé, mais il affiche toujours le même problème, à la fois dans le journal syslog et le journal généré
ajouté l'auteur Benji, source
Je reçois un message en vert /home/user/folder1/myScript.sh Pour une raison quelconque, mon fichier journal n'affiche plus aucun message d'erreur, donc je suppose qu'un pas est en route
ajouté l'auteur Benji, source

C'est un peu difficile à dire puisque vous utilisez des exemples anonymes, mais je pense que vous utilisez les mauvais chemins pour votre script. Généralement, les chemins seront dans l'un des trois formats suivants:

  • Absolute paths: these are distinguished by starting with "/", and the path is specified starting from the root of the system volume. If I'm understanding your example properly, your script is at the absolute path "/home/me/folder1/folder2/folder3/myScript.sh".

  • Home-based paths: these start with "~", optionally followed by a username. Assuming your username is "me" and your home directory is "/home/me", you could specify your script with either "~/folder1/folder2/folder3/myScript.sh" or "~me/folder1/folder2/folder3/myScript.sh".

    The path you used, "~/me/folder1/folder2/folder3/myScript.sh", is equivalent to "/home/me/me/folder1/folder2/folder3/myScript.sh". Note the "me/me/" bit -- that's because of the "/" between "~" and "me".

    (BTW, it's not important here, but these are not real paths; they're a shorthand the shell supports, so they can be used only in places where the command is interpreted by a shell or something similar.)

  • Relative paths: these don't start with either "/" or "~", and the path is specified relative to the process's current working directory.

    In a cron job, the working directory is (at least initially) set to the user's home folder. Thus, when you specify the path "home/me/folder1/folder2/folder3/myScript.sh", it's equivalent to the absolute path "/home/me/home/me/folder1/folder2/folder3/myScript.sh".

Le résultat net est que vous devriez être en mesure d'utiliser l'un des chemins suivants:

/home/me/folder1/folder2/folder3/myScript.sh
~/folder1/folder2/folder3/myScript.sh
~me/folder1/folder2/folder3/myScript.sh
folder1/folder2/folder3/myScript.sh
0
ajouté
J'ai essayé tout cela et j'ai toujours les mêmes erreurs dans le syslog et le script ne fonctionne toujours pas à chaque minute.
ajouté l'auteur Benji, source