Xen сделает то, что Вы хотите.
Вам будет нужен Dom0, который является ОС, которая управляет целым шоу, но минимальная установка Linux сделает все, что Вы хотите.
Для этого нужен / dev / log
. Вы можете настроить демон syslog для перенаправления сообщений из вашего приложения в любой файл, который вам нравится.
Из python это должно быть так же просто, как вызов
syslog.syslog
.
Возможно, ваше приложение не должно работать как www-data
. Создайте для него нового системного пользователя - - параметр system
, если вы используете adduser
- и поместите его файлы в папку / srv / yourapp
. Затем вы можете создать для него каталог журналов, например / var / log / yourapp
, или хранить журналы в / srv / yourapp / logs
.
Таким образом, ваш веб-сервер будет работать как www-data
, ваше приложение будет работать как yourapp
, и вы сможете запустить оба из корневых. Например, при использовании nginx с опцией user www-data;
в его конфигурации и запуске вашего приложения как приложения uWSGI (это сервер контейнера приложений) с соответствующим
uid = yourapp
gid = yourapp
в конфигурации .ini для yourapp в / etc / uwsgi / apps-enabled /
. Конфигурация uWSGI отражает стиль конфигурации nginx. Вы создаете профили приложений в / etc / uwsgi / apps-available /
и символически связываете их с / etc / uwsgi / apps-enabled /
. Все остальное должно обрабатываться вашим дистрибутивом.
Насколько я могу судить, это канонический подход. По крайней мере, для веб-приложений Ubuntu и python. И это упрощает общее администрирование: сценарии запуска должны работать, как задумано, без каких-либо специальных изменений, обновления ничего не должны нарушать ... обычные преимущества.
В качестве еще более конкретного примера у меня есть вики MoinMoin, работающая как приложение uWSGI за nginx в Ubuntu.
С сайта nginx:
location = /wiki { return 301 /wiki/; }
location /wiki/ {
gzip off;
include uwsgi_params;
uwsgi_param SCRIPT_NAME /wiki;
uwsgi_modifier1 30;
uwsgi_pass unix:/run/uwsgi/app/moin/socket;
}
Из uWSGI moin.ini:
[uwsgi]
uid = moin
gid = moin
plugins = python
wsgi-file = /usr/share/moin/server/moin.wsgi
master = true
chmod-socket = 666
processes = 1
со всеми остальными настройками по умолчанию ( usr / share / uwsgi / conf / default.ini
для меня)
MoinMoin имеет своего отдельного пользователя
# grep moin /etc/passwd
moin:x:109:111::/srv/moin:/bin/false
и, поскольку он был установлен из репозитория, как и все остальное (nginx, uwsgi), оставшаяся конфигурация находится в / etc / moin /
.