Назад | Перейти на главную страницу

Запускать сервер Python при запуске

У меня есть несколько серверов на базе Python, которые мне нужно запустить, и я бы хотел, чтобы они запускались автоматически, когда я запускаю свой сервер Ubuntu. Как лучше всего их так выполнять?

Я надеялся, что смогу написать сценарий Bash и использовать Screen, чтобы заставить их работать в фоновом режиме, где я могу время от времени проверять их, но где, как

echo screen -d -m python

работает нормально,

echo screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`

нет, без сообщений об ошибках. Это как-то связано с пробелами? Даже если я окружил это кавычками? Я также пробовал:

WEB="screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`"
echo $WEB

Как способ избежать пробелов, но не повезло. Какой способ сценария Bash это сделать?

И, когда сценарий Bash заработает, где я могу его разместить, чтобы он запускался при запуске?

Ubuntu (и Debian) способ запустить приложения во время загрузки - превратить их в системные службы с помощью update-rc.d - см. Здесь инструкции: http://www.debuntu.org/how-to-manage-services-with-update-rc.d

Помните, что все, что запускается от имени root, является потенциальной уязвимостью безопасности, особенно если другие пользователи могут его изменить.

Ставить

sudo -n python /home/matt/tornadoServer/tornadoDeploy.py &

в файл /etc/rc.d/rc.local. Или любой другой эквивалент для вашего дистрибутива.

Предположим, что ваш скрипт - это хорошо работающий демон и вы настроили sudo так, чтобы не запрашивать пароль для запуска вашего скрипта.

Читать этот о скриптах запуска и этот о библиотеке демона python. Кроме того, вам не нужно запускать торнадо за реальным http сервером?

Это не удается, потому что sudo запрашивает пароль. Поскольку нет открытого TTY, он просто ждет, когда вы введете его, или, на самом деле, может мгновенно выйти из строя. Если вы используете его как root, вам не нужно запускать его как sudo.

Однако вы, вероятно, захотите изменить tornadoDeploy.py так, чтобы он демонизировал себя, то есть отсоединился, чтобы он не работал с открытым сеансом. В библиотека python-daemonize предоставляет простые инструменты, которые позволят вам это сделать. Это избавляет от необходимости иметь дело с экраном, но позволяет демонизировать процесс.

Если вы запускаете его из rc.local, вам также необходимо отредактировать / etc / sudoers и прокомментировать эту строку:

По умолчанию requiretty