uwsgi broken pipe when running it as systemd service
我正在使用python 2.7.11在conda虚拟环境中运行uwsgi / flask python应用程序。
我正在从CentOS 6迁移到CentOS 7,并希望利用systemd将我的应用程序作为服务运行。如果我手动为应用程序(
1 2 3 4 5 6 | WSGI app 0 (mountpoint='') ready in 8 seconds on interpreter 0x14c38d0 pid: 3504 (default app) mountpoint already configured. skip. *** uWSGI is running in multiple interpreter mode *** spawned uWSGI master process (pid: 3504) emperor_notify_ready()/write(): Broken pipe [core/emperor.c line 2463] VACUUM: pidfile removed. |
这是我的系统单位文件:
1 2 3 4 5 6 7 8 9 | [Unit] Description=foo [Service] ExecStart=/bin/bash /app/foo/bin/start-foo.sh ExecStop=/bin/bash /app/foo/bin/stop-foo.sh [Install] WantedBy=multi-user.target |
不确定是否需要,但这是我的uwsgi皇帝和附庸配置:
皇帝
1 2 3 | [uwsgi] emperor = /app/foo/conf/vassals/ daemonize = /var/log/foo/emperor.log |
附庸
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [uwsgi] http-timeout = 500 chdir = /app/foo/scripts pidfile = /app/foo/scripts/foo.pid #socket = /app/foo/scripts/foo.soc http = :8888 wsgi-file = /app/foo/scripts/foo.py master = 1 processes = %(%k * 2) threads = 1 module = foo callable = app vacuum = True daemonize = /var/log/foo/uwsgi.log |
我尝试使用Google解决此问题,但似乎找不到任何相关内容。我怀疑这与在虚拟环境中运行uwsgi并使用systemctl启动它有关。我是systemd n00b,所以如果我在Unit文件中做错了事,请告诉我。
这不是阻止程序,因为我仍然可以通过手动执行脚本来启动/停止我的应用程序,但是我希望能够将其作为服务运行,并在启动时使用systemd自动启动。
按照uwsgi文档中有关设置systemd服务的说明进行操作即可解决此问题。
这是我更改的内容:
从Emperor和Vassal配置中删除了
从上面的链接获取了单位文件,并对其进行了少许修改以与我的应用程序一起使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [Unit] Description=uWSGI Emperor After=syslog.target [Service] ExecStart=/app/foo/bin/uwsgi /app/foo/conf/emperor.ini RuntimeDirectory=uwsgi Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.target |