Демонизация Python-скрипта в Debian с использованием virtualenv - PullRequest
8 голосов
/ 18 октября 2011

Я видел много скриптов для демонизации скрипта Python в Linux, но не так много информации о том, как их использовать. Может ли кто-нибудь наставить меня на это?

В настоящее время у меня есть длинный скрипт на python, который прослушивает сокет для входящего сообщения, если это правильный формат, принимает его и затем сохраняет его в базе данных. Сам скрипт просто открывает сокет, а затем прослушивает некоторое время true (что делает работу!) И выполняет всю работу там.

Чтобы демонизировать его, придется ли мне изменять мой текущий скрипт или вызывать его из отдельного скрипта? Я видел примеры обоих, но не получил ни того, ни другого.

Кроме того, я использую virtualenv, который может стать причиной моих проблем, какие-либо советы по использованию этого с демонизированными сценариями?

Ответы [ 2 ]

6 голосов
/ 18 октября 2011

Создайте shell-скрипт, который активирует виртуальную среду и запускает ваш скрипт Python в фоновом режиме.

Кроме того, в виртуальной среде должен быть модуль python, который вы можете импортировать и активировать из среды.тоже.В настоящее время у меня нет virtualenv, поэтому я не могу проверить, где он находится, но искать в виртуальной среде activate (или что-то подобное), и вы должны его найти.

Редактировать: Добавлен минимальный скрипт Debian init.d

Абсолютно минимальный скрипт, необходимый для запуска демона при загрузке компьютера, такой:

#!/bin/sh
/path/to/program &

& делаетпрограмма запускается в фоновом режиме, поэтому она не остановит остальную часть процесса загрузки.

Для более полного сценария скопируйте /etc/init.d/skeleton и отредактируйте новый файл.Важной частью для редактирования является блок в начале (между ### BEGIN INIT INFO и ### END INIT INFO, который используется программой update-rc.d) и переменные NAME, DAEMON и DAEMON_ARGS.Надеюсь, это все, что нужно для создания сценария запуска.

Активируйте сценарий следующим образом:

sudo update-rc.d <name of script> defaults
sudo update-rc.d <name of script> enable

И для его запуска:

sudo update-rc.d <name of script> start

<name of script> это просто имя, а не полный путь.

5 голосов
/ 07 января 2012
script
  export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
  exec start-stop-daemon --start  --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script

Когда вам нужно запустить приложение в python virtualenv, вы можете либо «активировать» virtualenv, либо использовать уникальную команду python этой среды.

Согласно веб-сайту "Если вы напрямую запускаете скрипт или интерпретатор python из каталога bin / virtualenv (например, путь к / env / bin / pip или / path / to / env / bin / python script.py) нет необходимости в активации. " - http://pypi.python.org/pypi/virtualenv

У меня также есть несколько модулей Python, которые были скомпилированы из исходного кода. Они должны быть в переменной окружения PYTHONPATH. Это может быть частью вашей активации virtualenv, сделанной с помощью virtualwrapper, или явно названной (как я делаю ниже.)

Вызов программы из задания UPSTART также работает. Мой пример выше.

В экземпляре Ubuntu 10.10 на Amazon EC2 мне повезло с командой start-stop-daemon. Я также боролся с другими выскочившими «строфами». Я вызываю приложение на python с определенным virtualenv и некоторыми параметрами для моей исполняемой программы.

...