Question

Ubuntu Server 9.10, Voici mon fichier, test.py

import commands
blkid = commands.getoutput('blkid')
print blkid

Quand je lance manuellement (en SU) suivante:

python test.py

Je reçois la sortie du blkid comme prévu:

/dev/sda1: UUID="3f0ac5bb-f0da-4574-81f5-77844530b561" TYPE="ext4"
/dev/sda5: UUID="67df0e7c-74fb-47dd-8520-ad720fbed67d" TYPE="swap"
/dev/sdb1: UUID="85466892-8dae-461c-95da-b8f91c2e766b" TYPE="ext3"
/dev/sdc1: UUID="91b84635-21c2-4d9a-84f8-2bbaab16d41f" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdd1: UUID="6a52c830-0029-4154-80cb-f17274eb6fed" SEC_TYPE="ext2" TYPE="ext3"

Mais quand j'ajoute à mon crontab SU:

* * * * * python /home/myusername/test.py > /home/myusername/output

Le contenu de sortie devient:

sh: blkid: not found

Qu'est-ce que je manque ici? Est-ce le python commandes Module uniquement pour certaines commandes spécifiques à SH? J'essaie juste d'exécuter une commande de système et capturer la sortie dans une variable que je peux analyser.

Était-ce utile?

La solution

Le problème est probablement avec votre $PATH contre root (le os.environ['PATH'] si vous cherchez à en Python plutôt que shell ;-). PATH de racine est généralement très conservatrice (il serait risqué pour qu'il ne soit pas!) et que vous utilisez blkid sans spécifier un chemin absolu qui peut facilement dire que ce soit sur votre PATH mais pas de racine.

Alors faites vous-même à which blkid comme une invite du shell, ou de toute façon sudo su devenir root, et echo $PATH - vous pouvez vérifier rapidement le problème. Ensuite, vous le réparer en utilisant le chemin complet absolu de blkid dans l'appel plutôt que l'identifiant nu getoutput blkid que vous faites maintenant.

Autres conseils

L'environnement (et PATH) d'une tâche cron est pas nécessairement le même que votre shell de connexion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top