Pergunta

Ubuntu Server 9.10, aqui está o meu arquivo, test.py

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

Quando eu corro manualmente (como su) isto:

python test.py

Eu recebo a saída do blkid como esperado:

/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"

No entanto, quando eu adiciono isso ao meu su Crontab:

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

O conteúdo de resultado torna-se:

sh: blkid: not found

O que estou perdendo aqui? É o python comandos Módulo apenas para certos comandos específicos de SH? Estou apenas tentando executar um comando do sistema e capturar a saída em uma variável que posso analisar.

Foi útil?

Solução

O problema provavelmente está com o seu $PATH versus root (os.environ['PATH'] Se você está olhando para isso em Python em vez de Shell ;-). O caminho de Root é tipicamente muito conservador (seria arriscado para não ser!) E como você está correndo blkid sem especificar um caminho absoluto que pode significar facilmente que está no seu caminho, mas não no root.

Então faz which blkid Como você mesmo em um prompt de shell, sudo su ou de qualquer maneira se tornam raiz, e echo $PATH - Você pode verificar rapidamente o problema. Então você o conserta usando o caminho completo absoluto do BLKID no getoutput ligue em vez de apenas o identificador nu blkid Como você está fazendo agora.

Outras dicas

O ambiente (e o caminho) de um trabalho de Cron não é necessariamente o mesmo que o seu shell de login.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top