Как вызвать процесс bash изнутри django / wsgi? - PullRequest
4 голосов
/ 09 апреля 2010

Я использую адаптер mod_wsgi apache2 для сайта django, и мне нравится вызывать некоторый процесс bash внутри представления, используя обычный

...
p = subprocess.Popen("/home/example.com/restart-tomcat.sh", shell=True)
sts = os.waitpid(p.pid, 0)[1]
...

Этот код прекрасно работает из обычной оболочки Python, но ничего не делает (я могу проследить прямо сейчас) при вызове из django. Я пропускаю некоторые ограничения wsgi? Сценарий имеет 755 разрешений, поэтому он должен быть исполняемым.

Быстрый тест

p = subprocess.Popen("date >> home/example.com/wsgi-test.txt", shell=True)
sts = os.waitpid(p.pid, 0)[1]

показывает, что он даже не выполняет тривиальные команды. У меня нет идей, и я благодарен за любой вклад.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2010

Сам скрипт может иметь 755 разрешений, но вещи, которые он вызывает, могут не иметь правильных разрешений. Особенно если у вас запущен tomcat на порту 80, который является привилегированным портом.

Есть способы обойти подобные вещи (setuid, sudo), но вам лучше точно знать, что вы делаете.

Я бы изменил ваш вызов Popen, чтобы открыть другой скрипт с содержанием date >> /home/example.com/test.txt, просто чтобы посмотреть, выполняет ли он его вообще, и тогда вы можете беспокоиться о попытке отладки разрешений.

0 голосов
/ 09 августа 2010

Запись на стандартный вывод

здесь: http://code.google.com/p/modwsgi/wiki/ApplicationIssues

Это применимо здесь? Я исследую подобную проблему ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...