sudo systemctl restart postgresql
返回
"Failed to wait for response: Success"
检查我的日记表明确实发生了重启。但是因为此消息作为标准错误返回,所以我的 ansible 脚本向我显示了“失败”。(即使重新启动没有失败。我手动检查了我的 postgresql 服务也在运行)。
这明明是bug?
sudo systemctl restart postgresql
返回
"Failed to wait for response: Success"
检查我的日记表明确实发生了重启。但是因为此消息作为标准错误返回,所以我的 ansible 脚本向我显示了“失败”。(即使重新启动没有失败。我手动检查了我的 postgresql 服务也在运行)。
这明明是bug?
这是包含静态 html 文件的目录
public
|-- index.html
|-- media
| `-- blurred_image-8.jpg
|-- post
| `-- 13considerations
| `-- index.html
我正在尝试配置 nginx 以转换所有以去除.html
后缀结尾的 url。
像这样:-
server {
listen 80;
server_name mysite.com;
location / {
root /var/www/mysite/public;
try_files $uri $uri/ $uri/index.html;
}
location /media/ {
alias /var/www/mysite/public/media/;
error_page 404 = /404;
expires 30d;
}
location /static/ {
alias /var/www/mysite/public/static/;
error_page 404 = /404;
expires 30d;
}
}
这适用于主页“ http://mysite.com/ ”,但如果我尝试访问“ http://mysite.com/post/13considerations/ ”,我会收到 500 内部服务器错误。
是什么赋予了?
所以我写了一个 golang 应用程序,systemd
每当我的服务器重新启动时,我都希望通过它进行初始化。
这是服务文件:-
[Unit]
Description=golang wiki initialization
[Service]
Type=forking
PIDFile=/tmp/gowiki.pid-3030
User=root
Group=root
WorkingDirectory=/var/www
ExecStart=/bin/bash -c 'daemonize -o stdout.log -e stderr.log /var/www/wiki'
[Install]
WantedBy=multi-user.target
每当我重新启动服务器时,它似乎都运行良好,但是当我gowiki
在终端中像这样手动启动或重新启动时,我仍然遇到轻微的刺激性问题:-
systemctl start gowiki
或者
systemctl restart gowiki
这确实让我的 gowiki 进程运行;然而,在我执行我的systemctl start gowiki
命令后,我被冻结在我的终端中并且该命令似乎没有退出,直到我手动强制使用 Ctrl-C。
导致这个问题我做错了什么?
所以我写了这个简单的 systemd 服务脚本:-
[Unit]
Description=uwsgi server script
[Service]
User=web
Group=web
WorkingDirectory=/var/www/prod/myproject/releases/current
ExecStart=/bin/bash -c 'source ~/.bash_profile; workon myproject; uwsgi --ini /var/www/prod/myproject/releases/current/myproject/uwsgi_prod.ini'
[Install]
WantedBy=multi-user.target
效果很好——它启动了,我可以在htop
.
然而,它在闲置 5 分钟后就莫名其妙地关机了。
如果我通过执行在 bash 控制台中手动启动此过程,作为 web 用户:-
source ~/.bash_profile
workon myproject
uwsgi --ini /var/www/prod/myproject/releases/current/myproject/uwsgi_prod.ini
我的进程在空闲后不会死。
可能是什么问题?
所以我正在试验 uWSGI 并且非常喜欢它。
不过,我对使用其 .ini 文件有疑问。
是否可以动态计算其 .ini 配置参数的值?
例如,对于我的“uwsgi.ini”文件中的“chdir”值,我有
[uwsgi]
socket=127.0.0.1:3034
chdir=/Users/calvin/work/myproject
virtualenv=/Users/calvin/.virtualenvs/myproject
module=django.core.handlers.wsgi:WSGIHandler()
env= DJANGO_SETTINGS_MODULE=myproject.settings
master=True
pidfile=/tmp/myproject-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/myproject.log
必须为我的“本地机器”、我的“开发/暂存”服务器和我的“生产服务器”编写 3 个单独的 .ini 文件是一件很麻烦的事情。更何况同事的本地机器的chdir
价值会完全不同。
我尝试使用import os
和动态os.join.path
计算chdir
值,但它不起作用,这是预料之中的,因为 uwsgi 没有 python 解释器?
我在我的服务器上部署了一个负载平衡器/反向代理(nginx 或 cherokee,无关紧要),它指向循环设置中的多个后台 Web 服务器进程(gunicorn 或 cherrypy,无关紧要) .
为了尽量减少停机时间,我有一个网络服务器重启脚本,它会杀死一个特定的网络服务器进程(比如 8 个进程),然后立即再次启动它;然后继续下一个网络服务器进程(杀死它,然后再次启动它)所以在任何时候,我的反向代理总是至少有 7 个进程可以指向。
这很棒; 但是有没有办法“完善”这个过程,这样我就根本不会得到 502 Bad gateway? 502 网关发生在用户恰好在网站上并使用暂时被杀死和复活的网络服务器进程时。
显然,我需要重启脚本的原因是为了在我的 python 应用程序(在 gunicorn 或 cherrypy 上运行)中部署新的 python 代码。
假设我有一个这样的 shell 脚本:-
#!/bin/sh
# cherrypy_server.sh
PROCESSES=10
THREADS=1 # threads per process
BASE_PORT=3035 # the first port used
# you need to make the PIDFILE dir and insure it has the right permissions
PIDFILE="/var/run/cherrypy/myproject.pid"
WORKDIR=`dirname "$0"`
cd "$WORKDIR"
cp_start_proc()
{
N=$1
P=$(( $BASE_PORT + $N - 1 ))
./manage.py runcpserver daemonize=1 port=$P pidfile="$PIDFILE-$N" threads=$THREADS request_queue_size=0 verbose=0
}
cp_start()
{
for N in `seq 1 $PROCESSES`; do
cp_start_proc $N
done
}
cp_stop_proc()
{
N=$1
#[ -f "$PIDFILE-$N" ] && kill `cat "$PIDFILE-$N"`
[ -f "$PIDFILE-$N" ] && ./manage.py runcpserver pidfile="$PIDFILE-$N" stop
rm -f "$PIDFILE-$N"
}
cp_stop()
{
for N in `seq 1 $PROCESSES`; do
cp_stop_proc $N
done
}
cp_restart_proc()
{
N=$1
cp_stop_proc $N
#sleep 1
cp_start_proc $N
}
cp_restart()
{
for N in `seq 1 $PROCESSES`; do
cp_restart_proc $N
done
}
case "$1" in
"start")
cp_start
;;
"stop")
cp_stop
;;
"restart")
cp_restart
;;
*)
"$@"
;;
esac
从 bash 脚本中,我们基本上可以做 3 件事:
./cherrypy_server.sh start
./cherrypy_server.sh stop
./cherrypy_server.sh restart
我如何将这个 shell 脚本systemd
作为一个cherrypy.service
文件置于 的控制之下(其明显目标是让 systemd 在机器重新启动时启动 cherrypy 服务器)?
此处参考systemd
服务文件示例 - https://wiki.archlinux.org/index.php/Systemd#Using_service_file