我有一个 Nginx 网络代理、gunicorn 网络服务器和一个 python/flask 网络应用程序。Gunicorn 进程显然已经死了,我想在未来通过研究一种实用程序来改善这一点,该实用程序可以在 gunicorn 进程再次崩溃时监控并重新启动它。
我发现了几个可以完成这项工作的流程监督实用程序:
是否有一篇综合文章比较和对比了用于监视和重新启动进程的各种实用程序?
在 Ubuntu 12.10 中
user@xyz:~$ sudo initctl --version
initctl (upstart 1.5)
Copyright (C) 2012 Scott James Remnant, Canonical Ltd.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
user@xyz:~$ ls -l /etc/init/rs-comm.conf
-rw-r--r-- 1 root root 349 ????. 15 03:22 /etc/init/rs-comm.conf
user@xyz:~$ sudo initctl reload-configuration
user@xyz:~$ sudo initctl start rs-comm
initctl: Unknown job: rs-comm
Run Code Online (Sandbox Code Playgroud) 在 Ubuntu 10.04 上,我需要使用 upstart 启动我的服务,但前提是 mysql 启动并运行。
问题是 mysql 本身不是由 upstart 处理的,所以我不能使用“启动”功能。
我能做什么 ?
我有一个如下所示的新贵配置文件,它在 Ubuntu 14 中运行良好:
#/etc/init/data_server.conf
#sudo start data_server
#sudo stop data_server
#sudo status data_server
start on runlevel [2345]
stop on runlevel [016]
chdir /opt/hold/data_server
respawn
post-start script
echo "data server started at `date +"%F %T"` on `hostname -f`" | mailx -r "abc@host.com" -s "data server Started" "pqr@host.com"
end script
post-stop script
sleep 30
end script
limit core unlimited unlimited
limit nofile 100000 100000
setuid goldy
exec ./proc_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Run Code Online (Sandbox Code Playgroud)
现在我们正在迁移到 Ubuntu 16,所以我们不能使用upstart,看起来我们需要在systemd这里使用。我必须确保每当系统重新启动或应用程序被终止时,它应该 …
将upstart/initctl使用什么信号来重新启动作业?此外,有什么方法可以指定应该使用 SIGHUP 吗?
或者,有没有办法定义reload将发送 SIGHUP的自定义命令?或者我需要去外面upstart这样做吗?
我正在使用 upstart 通过 autossh 管理反向 SSH 隧道。当我执行“sudo start tunnel”时,连接正常;但是,当网络服务启动时,该命令不会自动运行,无论我如何更改“启动”属性,我似乎都无法让它以自动方式运行。
但是,就像我说的,我可以很好地启动/停止它。
这是我的 /etc/init/tunnel.conf,去掉了敏感内容:
description "SSH Tunnel"
start on started networking
stop on stopping networking
respawn
env DISPLAY=:0.0
exec autossh -nNT -R 22100:localhost:22 myuser@myserver.com -p 2201
Run Code Online (Sandbox Code Playgroud) 我刚刚配置了一个运行 CentOS 6 的新 VPS,它与 Apache 一起提供。
我想禁用 Apache,因为我将使用 Nginx。
我知道我可以删除 /etc/init.d/ 中的脚本,但我不想这样做,因为它是系统附带的一个库存。我宁愿有一种优雅的方式来禁用该服务。
我以为我可以在 /etc/inittab 中放一些东西,但 inittab 包含:
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init. …Run Code Online (Sandbox Code Playgroud) 背景:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
Run Code Online (Sandbox Code Playgroud)
我已经构建了 nginx,我想使用 upstart 来启动它:
来自该站点的 nginx 新贵脚本:
description "nginx http daemon"
start on runlevel 2
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
console owner
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
respawn
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 initctl 运行它时,我得到了“未知工作”,我刚刚了解到这显然意味着存在错误,(用“错误”来描述错误有什么问题?)
有人可以指出我正确的方向吗?我已经阅读了文档,就像它一样,对于 SysV init 替代品来说,它似乎有点稀疏......但是只要将这个工作添加到列表中,运行它,然后继续我的生活。 .. 有小费吗?
编辑:initctl 版本 init(新贵 0.6.5)
我正在运行 Ubuntu 服务器 11.04。我已经按照此处所述创建了一个 Upstart 用户作业。
我有以下文件/home/myuser/.init/sensors.conf:
start on started mysql
stop on stopping mysql
chdir /home/myuser/mydir/project
exec /home/myuser/mydir/env/bin/python /home/myuser/mydir/project/manage.py sensors
respawn
respawn limit 10 90
Run Code Online (Sandbox Code Playgroud)
因为myuser我可以正常启动、停止和重新加载工作 - 它运行良好:
$ start sensors
sensors start/running, process 1332
$ stop sensors
sensors stop/waiting
Run Code Online (Sandbox Code Playgroud)
问题是作业在启动时不会在启动时自动mysql启动。重新启动后,mysql正在运行,但我的sensors工作不是。
奇怪的是,虽然工作不是在启动时开始,但如果我sudo用来重新启动mysql它确实开始了我的工作。以下命令myuser从全新启动时运行:
$ status sensors
sensors stop/waiting
$ sudo restart mysql
mysql start/running, process 1209
$ status sensors
sensors start/running, process …Run Code Online (Sandbox Code Playgroud) 我开始将我们所有的系统转换为使用 upstart 来管理我们的各种应用程序流程。我经常缺少的一件事是能够向进程stop或restart事件发送不同的信号。
例如,我们使用Unicorn运行我们的 Web 进程。Unicorn 有一个很棒的信号处理 API。当我想优雅地重新加载进程时,我向主 pid 发送一个 USR2 信号。为了优雅地关闭它们,我发送了一个 QUIT 命令。TERM(新贵的默认停止信号)构成立即关闭。
另一个例子是使用Resque。为了优雅地关闭一个工人,我向它发送 QUIT 信号。TERM 信号再次导致立即关闭,无论工人的孩子是否被分叉。
新贵是否支持自定义信号?我似乎在任何地方都找不到它,这让我担心我正在使用“错误的工作工具”。
upstart ×10
linux ×4
ubuntu ×4
ubuntu-10.04 ×3
init ×2
centos ×1
daemontools ×1
httpd ×1
process ×1
runit ×1
service ×1
ssh ×1
supervisord ×1
systemd ×1
ubuntu-12.10 ×1
ubuntu-16.04 ×1
unicorn ×1