comment écrire un cronjob multi-commande sur un Raspberry Pi ou tout autre système Unix

J’essaie d’exécuter un script cron dans python 3, j’ai donc dû configurer un environnement virtuel (s’il y a un moyen plus simple, s’il vous plaît faites le moi savoir) et pour exécuter le script je dois être dans le dossier parent du script écrit dans les fichiers texte là-bas. Voici donc la longue chaîne de commandes que j’ai mise au point et qui fonctionne dans la console mais ne fonctionne pas dans cron (ou je ne trouve pas la sortie ..)

Je ne peux pas taper les 5 astérisques sans que cela se transforme en puces .. mais je les ai dans l’onglet cron.

cd usr / local / sbin / cronjobs &&. virtualenv / secret_ciphers / bin / activate && cd csgostatsbot && python3 CSGO_STATS_BOT_TASK.py && désactiver

On dirait que vous pouvez avoir une errance . là, cela provoquerait probablement une erreur dans la chaîne de commande.

Essaye ça:

cd usr / local / sbin / cronjobs && virtualenv / secret_ciphers / bin / activate && cd csgostatsbot && python3 CSGO_STATS_BOT_TASK.py && désactiver

En supposant que le répertoire virtualenv se trouve dans le répertoire cronjobs .

En outre, vous pouvez ignorer l’activation / désactivation et exécuter simplement l’interpréteur python3 dès la sortie de virtualenv . c’est à dire

/ usr / local / sbin / cronjobs / virtualenv / secret_ciphers / bin / python3 /usr/local/sbin/cronjobs/csgostatsbot/CSGO_STATS_BOT_TASK.py

Modifier en réponse aux commentaires de OP:

L’ activation de l’activation est ce qui active le virtualenv. Pas sûr de ce que le . ferait exception à la cause des problèmes d’parsing des commandes shell.

Les deux exemples impliquent l’utilisation de virtualenv . Vous n’avez pas besoin d’appeler explicitement activate . Tant que vous appelez l’interpréteur hors du répertoire de virtualenv , vous utilisez virtualenv . activate est essentiellement une méthode pratique qui ajuste votre PATH pour que python3 et les autres fichiers bin se réfèrent au répertoire de virtualenv au lieu de l’installation du système.

2ème édition en réponse au commentaire add’l de l’OP:

Vous devez redirect stderr , c’est-à-dire:

/ usr / local / sbin / cronjobs / virtualenv / secret_ciphers / bin / python3 /usr/local/sbin/cronjobs/csgostatsbot/CSGO_STATS_BOT_TASK.py> /tmp/botlog.log 2> & 1

Et voyez si cela donne des informations supplémentaires.

De plus, 5 astérisques dans cron exécuteront le script toutes les minutes 24/7/365. Est-ce vraiment ce que tu veux?

3ème édition en réponse au commentaire add’l d’OP:

Si vous voulez que ça marche toujours, je ne suis pas sûr que vous vouliez vraiment utiliser cron. Même avec 5 astérisques, il sera exécuté une fois par minute. Cela signifie qu’il n’est pas toujours en cours d’exécution. Il s’exécute une fois par minute, et si cela prend plus d’une minute, vous pourriez avoir plusieurs copies en cours d’exécution (ce qui peut ou ne pas être un problème, selon votre code), et si cela fonctionne très rapidement, par exemple en deux. secondes, vous aurez le rest de la minute à attendre avant de recommencer.

On dirait que vous voulez que le script soit essentiellement un démon . Autrement dit, lancez simplement le script principal dans une boucle while (True) , puis lancez-le une fois. Ensuite, vous pouvez le quitter via +c , sinon il est perpétuellement exécuté.

Essayez ces commandes. J’espère que vous vous retrouverez avec un arrangement plus simple et plus compréhensible:

 $ sudo apt-get install python3 # Just in case you haven't already $ sudo apt-get install python3-pip $ sudo pip3 install praw $ vi CSGO_STATS_BOT_TASK.py «Ensure that "#!/usr/bin/env python3" is the first line» $ chmod +x CSGO_STATS_BOT_TASK.py $ crontab -e * * * * * /path/to/CSGO_STATS_BOT_TASK.py