Python в Су Крон дает разные вывод, чем исполнение вручную

StackOverflow https://stackoverflow.com/questions/2384327

  •  24-09-2019
  •  | 
  •  

Вопрос

Ubuntu Server 9.10, вот мой файл, test.py

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

Когда я вручную бегаю (как SU) это:

python test.py

Я получаю вывод забитый как и ожидалось:

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

Однако, когда я добавляю это в мой SU CRONTAB:

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

Содержание выход становится:

sh: blkid: not found

Что я здесь не хватает? Это питон команды Модуль только для определенных SH-определенных команд? Я просто пытаюсь запустить команду системы и захватить вывод в переменную, которую я могу разобрать.

Это было полезно?

Решение

Проблема, вероятно, с вашим $PATH против root (os.environ['PATH'] Если вы смотрите на него в Python, а не оболочку ;-). Путь корня обычно очень консервативна (это было бы рискованно для этого не быть!) И так как вы бегаете blkid Не указав абсолютный путь, который может быть легко означать, что он на вашем пути, но не рут.

Ну действуй which blkid как вы в приглашении оболочки, sudo su или в любом случае стать рутом, а echo $PATH - Вы можете быстро подтвердить проблему. Затем вы исправите это, используя абсолютный полный путь Blkid в getoutput звонок, а не просто голый идентификатор blkid Как вы делаете сейчас.

Другие советы

Окружающая среда (и путь) задания CRON не обязательно такая же, как ваша система входа в систему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top