2017-10-13 15 views
0

J'ai un script shell cron qui appelle un script python du même répertoire mais quand ce cron est en cours d'exécution, je ne reçois pas la sortie attendue de mon script python et quand je l'exécute manuellement mon python La sortie du script est comme prévu.Appel d'un script python à partir du script shell cron

J'ai fourni des chemins de script python comme /usr/bin/python room_wise.py

et compte tenu de tous les params shell en script shell ainsi, mais toujours mon script python est pas appelé à l'aide du cron script shell.

Quelqu'un peut-il m'aider ici?

+1

Avez-vous essayé '/ usr/bin/python/path/to/room_wise.py'? – Nepho

+0

Oui @ Nepho, j'ai essayé les deux choses, – Sid

+0

Est-ce que la sortie de 'quel python''/usr/bin/python' est attendue? – Nepho

Répondre

0

Le gros problème des tâches cron est l'emplacement absolu des répertoires et l'emplacement relatif des répertoires. Vous devez d'abord diviser le chemin relatif, comme indiqué.

#!/usr/bin/env bash 
dirName=`dirname $0` 
baseName=`basename $0` 
arg1=$1 
arg2=$2 
cd ${dirName} && python ./room_wise.py arg1 arg2 

Utilisez ensuite crontab -e pour ajouter des éléments à vos tâches cron utilisateur et ajouter ce qui suit:

PATH=/usr/bin:/bin:/sbin 
30 00 * * * /my/directory/containing/room_wise_py.sh arg1 arg2 > /my/directory/containing/output.log 2>&1 

Vous pouvez voir que j'ai ajouté le chemin car cela peut parfois être un problème certaines distributions du système d'exploitation. En outre, le script existe dans le même répertoire que le script bash, ou vous pouvez passer l'emplacement du répertoire en tant qu'argument si vous modifiez le script bash pour inclure dirname à $ 1.

Vous pouvez également voir que j'ai dirigé toutes les sorties vers un fichier journal. C'est une très bonne idée car il est parfois très difficile de déboguer le processus si quelque chose ne va pas.

+0

N'oubliez pas d'ajouter #!/Usr/bin/env python au début de votre script python si vous ne l'avez pas déjà fait. C'est également un aspect important pour bien exécuter lors de l'exécution de logiciels à partir de scripts bash dans cron. –

+0

que fait la ligne '2> & 1' à la fin du tuyau? –