cron queue de scripts bash et python

Sep 29 2020

Je cherche actuellement à comprendre et à me familiariser avec les files d'attente crontab sur mon macbook pro. J'ai récemment résolu un problème où mon simple script bash ne s'exécutait pas. Il s'avère que j'ai dû déplacer mon script bash et sa sortie dans le /Users/myusername/chemin. Avant je l'avais dans le /Users/myusername/Desktop/. Ce message peut être trouvé ici -https://stackoverflow.com/questions/64110897/simple-bash-script-doesnt-cron-properly?noredirect=1#comment113370465_64110897

Ma question: est-ce que tous mes scripts bash et python doivent toujours être logés dans /Users/myusernamepath? N'y a-t-il pas de solution de contournement?

Réponses

3 Seamus Sep 30 2020 at 13:36

Question:

Ma question: est-ce que tous mes scripts bash et python doivent toujours être logés dans /Users/myusernamepath? N'y a-t-il pas de solution de contournement?

Réponse:

Non. Vous pouvez localiser vos scripts bash et python où vous le souhaitez. Cependant, il existe des exigences supplémentaires :

  1. Vos crontravaux s'exécutent avec un ENVIRONNEMENT différent de celui lorsque vous les exécutez; par exemple $PATH. Par conséquent, vous devez utiliser une spécification de chemin complet pour spécifier vos scripts dans le crontab; par exemple utilisez:
* * * * * /opt/local/bin/python3 /some/dir/you/choose/myscript.py
  1. Sur mon Mac (Catalina), j'ai jugé nécessaire d'accorder les privilèges «Accès complet au disque» à cron. YMMV sur une autre version du système d'exploitation. Voici comment:

System Preferences -> Security & Privacy -> Privacy onglet:

  1. Au moins lors du débogage de votre crontravail, vous devriez envisager de rediriger tous les messages d'erreur ( stderr) vers un fichier - sinon ils se retrouvent dans /dev/nullce qui n'est pas utile! Continuant avec l'exemple ci-dessus:
* * * * * /opt/local/bin/python3 /some/dir/you/choose/myscript.py >> /Home/<username>/MyCronLog.txt 2>&1
2 bmike Sep 29 2020 at 07:24

Vous devrez peut-être simplement vous assurer d'accorder des autorisations aux éléments et d'utiliser des chemins complets pour tout. Ce n'est pas parce qu'un script s'exécute lorsque vous êtes dans un shell interactif qu'il est correct dans un shell limité.

Voici de super conseils de débogage sur une question récente.

  • cron et "commande non trouvée"
  • cronjobs ne s'exécutent pas
  • Obtention d'une erreur de commande inconnue lors de la tentative d'exécution d'un script via cron