Я пропущу ту часть, в которой настоятельно рекомендую вам узнать, как веб-приложение запускает и останавливает системные процессы, и постараюсь ответить на вопрос.
Ваше приложение django не должно запускаться с * 1003.* root user, который, вероятно, понадобится для запуска и остановки служб.Вероятно, вы можете преодолеть это путем:
- создания сценария, использующего seteuid
- , который присваивает этому файлу атрибут set uid
Сценарий будет выглядеть примерно так:
#!/usr/bin/python <- or wherever your python interpreter is
import os
os.seteuid(0)
os.system("service httpd restart 1>$HOME/out 2>$HOME/error")
Чтобы разрешить установку эффективного UID для root (0), вы должны запустить в оболочке от имени root:
chown root yourscript.py
chmod u+s yourscript.py
chmod a+x yourscript.py
Это должносделай это.В вашем приложении Django теперь вы можете вызывать os.system('yourscript.py')
для запуска команды с правами root.
Наконец, я считаю, что команда, которую вы передаете os.system()
, не то, что вы ищете,так как вы говорите о включении и отключении демонов, и все, что вы делаете, это перезапускаете Apache ... что, в свою очередь, похоже, именно там работает ваш django, поэтому на практике вы убьете свое собственное веб-приложение.