cron queue de scripts bash et python
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
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 :
- 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 lecrontab; par exemple utilisez:
* * * * * /opt/local/bin/python3 /some/dir/you/choose/myscript.py
- 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:
- 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
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