我有一个在 CherryPy 服务器中运行的 Python Web 应用程序,它作为 Windows 服务运行。我有一个批处理文件来部署这个应用程序,但我仍然需要远程桌面到服务器才能重新启动服务。有没有办法编写这个脚本?
我试过:
psexec \\server "net restart cherrypyservice"
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
chpasswd从面料脚本。另一种选择是在Fabric脚本中使用Pexpect。[xxx.xx.xx.xxx] run: echo "johnsmith:supersecretpassw0rd" | chpasswd。我已经使用Fabric创建了一个 Python 脚本来配置一个新构建的Slicehost Ubuntu 切片。如果您不熟悉 Fabric,它会使用Python SSH2 客户端Paramiko来提供“用于应用程序部署或系统管理任务”的远程访问。
我让Fabric脚本做的第一件事就是创建一个新的管理员用户并设置他们的密码。与Pexpect不同,Fabric 无法处理远程系统上的交互式命令,因此我需要以非交互式方式设置用户密码。目前,我正在使用该chpasswd命令,该命令以明文形式读取用户名和密码。
# Fabric imports and host configuration excluded for brevity
root_password = getpass.getpass("Root's password given by SliceManager: ")
admin_username = prompt("Enter a username for the admin user to create: ")
admin_password = getpass.getpass("Enter …Run Code Online (Sandbox Code Playgroud) 我的 virtualenv + gunicorn 设置有一个奇怪的问题,只有当 gunicorn 通过 supervisord 启动时。我确实意识到这很可能是我的主管的问题,我将不胜感激任何有关寻求帮助的更好地方的反馈...
简而言之:当我从我的用户 shell 运行 gunicorn 时,在我的 virtualenv 中,一切都完美无缺。我能够访问我的 Django 项目的所有视图。
当系统启动时supervisord启动gunicorn时,一切正常。
但是,如果我必须终止 gunicorn_django 进程,或者如果我执行 supervisord 重新启动,一旦 gunicorn_django 重新启动,每个请求都会用奇怪的 Traceback 回答:
(...)
File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/__init__.py", line 77, in
connection = connections[DEFAULT_DB_ALIAS]
File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/utils.py", line 92, in __getitem__
backend = load_backend(db['ENGINE'])
File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/utils.py", line 50, in load_backend
raise ImproperlyConfigured(error_msg)
TemplateSyntaxError: Caught ImproperlyConfigured while rendering: 'django.db.backends.postgresql_psycopg2' isn't an available database backend.
Try using django.db.backends.XXX, where XXX is one of:
'dummy', 'mysql', 'oracle', 'postgresql', 'postgresql_psycopg2', 'sqlite3'
Error …Run Code Online (Sandbox Code Playgroud) 使用 uWSGI 来提供一个简单的 wsgi 应用程序(一个简单的“Hello, World”)我的配置有效,但是当我尝试运行一个 Flask 应用程序时,我在 uWSGI 的错误日志中得到了这个:
current working directory: /opt/python-env/coefficient/lib/python2.6/site-packages
writing pidfile to /var/run/uwsgi.pid
detected binary path: /opt/uwsgi/uwsgi
setuid() to 497
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
uwsgi socket 0 bound to TCP address 127.0.0.1:3031 fd 3
Python version: 2.6.6 (r266:84292, Jun 18 2012, 14:18:47) [GCC 4.4.6 20110731 (Red Hat 4.4.6-3)]
Set PythonHome to /opt/python-env/coefficient/
*** Python threads support is disabled. You can enable …Run Code Online (Sandbox Code Playgroud) uWSGI 配置:
<uwsgi>
<module>app_wsgi:app</module>
<pythonpath>./src</pythonpath>
<socket>/tmp/uwsgi.sock</socket>
<pidfile>/tmp/uwsgi.pid</pidfile>
<daemonize>uwsgi.log</daemonize>
</uwsgi>
Run Code Online (Sandbox Code Playgroud)
配置文件
[buildout]
parts = eggs uwsgi
versions = versions
include-site-packages = false
[eggs]
recipe: zc.recipe.egg:eggs
eggs =
flask
[versions]
flask = 0.9
[uwsgi]
recipe: buildout.recipe.uwsgi
version = 1.4.3
Run Code Online (Sandbox Code Playgroud)
例外:
*** Operational MODE: single process ***
added ./src/ to pythonpath.
Traceback (most recent call last):
File "./src/app_wsgi.py", line 1, in <module>
from app import create_app
File "./src/app.py", line 1, in <module>
from flask import Flask, request
ImportError: No module named flask
unable …Run Code Online (Sandbox Code Playgroud) 正如标题所说。如果我运行 yum update(它是一个 CentOS 机器)并且恰好有一个 Python 更新。如果其他用户运行 Python 程序会发生什么。我需要提醒他们重新启动程序吗?或者,如果他们愿意,他们可以基本上无限期地安全地继续运行这些程序吗?
换个方式问:只要有一些进程仍然打开,旧的 Python 版本是否会保留在系统(硬盘驱动器)上。还是更新会立即覆盖现有的 Python 安装/二进制文件?那么现有的进程继续运行只是因为 Python 解释器完全加载到内存中?
我有一个依赖于多个包的 Python 应用程序。不幸的是,其中一个包不在 PyPi 中,所以我必须直接从 git 存储库安装它。
我一直在尝试将它添加到我的 setup.py 中,如下所示:
setup(
..,
..,
dependency_links = [
'https://github.com/marcuz/libpynexmo.git#egg=nexmomessage'
],
install_requires=[
..,
'nexmomessage'
],
packages=['localpackage']
Run Code Online (Sandbox Code Playgroud)
但是它失败了:根本没有找到 nexmomessage 的发行版
我看到它在哪里创建依赖链接列表:将dependency_links 写入common.egg-info/dependency_links.txt - 当我查看该文件时,URL 是正确的。
如果我在命令行运行它: pip install -e git+ https://github.com/marcuz/libpynexmo.git#egg=nexmomessage
它安装没有问题。
想法?
对以下内容的更新:
我在不同数据中心的 Debian 虚拟机上的不相关脚本上遇到了类似的问题。
这看起来很像这里描述的问题(就像问这个问题的人一样,我没有在服务器前配置代理)。
与以下描述的主要区别在于,当我附加到挂起的进程时,我看到的是对recvfrom而不是的调用read:
$ strace -p 17527
Process 17527 attached - interrupt to quit
recvfrom(3,
Run Code Online (Sandbox Code Playgroud)
然而,Python 并没有任何被代理的印象:
>>> import os; print os.getenv("HTTP_PROXY"), os.getenv("http_proxy")
None, None
Run Code Online (Sandbox Code Playgroud)
所以我还是很难过。可悲的是,链接的问题也没有最终答案。
(我也想知道这个问题是否相关,但 S3 似乎不太可能不尊重Connection: close标题。)
我有几个 Debian(Wheezy、x86_64)服务器都表现出以下行为:
所有服务器都有一组 cron 作业,其中包括从 S3 中提取数据。这些通常运行良好,但偶尔会ps aux显示一些小时或几天前开始的作业仍在运行,并且没有完全完成。
通过strace -p <pid>显示检查它们,在所有情况下,该进程都挂在读取命令上。比如我刚才查的一个进程的输出是:
$ strace -p 12089
Process 12089 attached - interrupt to quit
read(5,
Run Code Online (Sandbox Code Playgroud)
检查打开的文件描述符给了我这个:
$ sudo lsof -i | grep 12089
python 12089 …Run Code Online (Sandbox Code Playgroud) 我们有一个 Jenkins CI 服务器,它从 Git 获取我们的代码,构建它,制作一个 Docker 镜像,然后将它发送到一些生产服务器。
我们的项目主要是用 Python 编写的,所以“构建”涉及运行
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
效果很好,只是有点慢。它必须通过网络获取包,另外还必须为其中一些构建 C 库(而且“lxml”并不小!)。
在开发中,我已经成功地pip-accel用来加速这个过程。它具有相同的接口,pip但它同时缓存 Python 下载和构建的 C 代码,所以
pip-accel install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
很快。
我想为我们的生产版本这样做,但我遇到了一些障碍。
显然,pip-accel需要一个目录来存储缓存。因为我们的 CI 服务器是运行构建的地方,所以这是放置它的合乎逻辑的地方。但是该pip install命令在一个新的 Docker 容器中运行,因此它不能只访问该服务器上的公共目录。
Docker“卷”似乎是为与容器共享目录而设计的,但我们的构建发生在内部(令人惊讶)docker build,并且只docker run允许您附加卷。您不能使用docker build.
有什么我想念的吗?如何在我docker build所在的容器之外运行并与我的主机共享缓存文件夹?
我有一个 crontab 文件,据说在加载项目虚拟环境后执行 Django 命令:
*/1 * * * * source /home/virtualenvs/mydjangoproject-venv/bin/activate && python /home/www/production/mydjangoproject/manage.py mydjangocommand
Run Code Online (Sandbox Code Playgroud)
...但它绝对没有任何作用。cron 日志输出没有特别的问题:
Mar 13 19:51:01 110 CRON[23807]: (root) CMD (source /home/virtualenvs/mydjangoproject-venv/bin/activate && python /home/www/production/mydjangoproject/manage.py mydjangocommand)
Run Code Online (Sandbox Code Playgroud)
不用说,当复制粘贴到 shell 中时,命令本身可以完美运行。
我知道它与我的 crontab 的环境变量有关,但我对这件事非常缺乏教育,而且我不知道该怎么做,尤其是当它在 python 虚拟环境下运行时。它应该使用我的用户环境变量吗?来自 virtualenv 的那些?如何实施?谢谢!
注意:如果有帮助,我的 crontab 环境变量有以下输出(当通过 crontab 将“env”导出到文件时):
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
LC_ALL=en_US.UTF-8
PWD=/root
Run Code Online (Sandbox Code Playgroud)
以及项目虚拟环境下的以下环境变量:
TERM=xterm-256color
SHELL=/bin/bash
SSH_CLIENT=x.x.x.x 53007 22
OLDPWD=/root/production/mydjangoproject
SSH_TTY=/dev/pts/0
LC_ALL=en_US.UTF-8
USER=root
VIRTUAL_ENV=/home/virtualenvs/mydjangoproject-venv
MAIL=/var/mail/root
PATH=/home/virtualenvs/mydjangoproject-
venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
LANG=en_US.UTF-8
PS1=(mydjangoproject-venv)${debian_chroot:+($debian_chroot)}\u@$(hostname -f):\w\$
SHLVL=1
HOME=/root
LS_OPTIONS=--color=auto --group-directories-first
LOGNAME=root
SSH_CONNECTION=x.x.x.x 53007 x.x.x.x 22 …Run Code Online (Sandbox Code Playgroud) python ×10
django ×2
linux ×2
pip ×2
uwsgi ×2
automation ×1
build-server ×1
centos ×1
cron ×1
deployment ×1
docker ×1
fabric ×1
gunicorn ×1
mac-osx ×1
pstools ×1
scripting ×1
supervisord ×1
svn ×1
virtualenv ×1
wsgi ×1
yum ×1