标签: runit

我如何在 upstart、runit、supervisor、daemontools、... 之间进行选择,以便在进程终止时重新启动进程?(过程监督/监控)

我有一个 Nginx 网络代理、gunicorn 网络服务器和一个 python/flask 网络应用程序。Gunicorn 进程显然已经死了,我想在未来通过研究一种实用程序来改善这一点,该实用程序可以在 gunicorn 进程再次崩溃时监控并重新启动它。

我发现了几个可以完成这项工作的流程监督实用程序:

  • 守护进程
  • 启动
  • 运行
  • s6
  • 导师
  • 系统D
  • 暴发户
  • ...

是否有一篇综合文章比较和对比了用于监视和重新启动进程的各种实用程序?

https://en.wikipedia.org/wiki/Process_supervision

upstart daemontools supervisord runit

13
推荐指数
1
解决办法
5856
查看次数

如何编写runit自定义停止脚本

我想要一个自定义的“停止”脚本runit( runsv) 在必须停止/重新启动进程时执行。目前它只是终止进程,然后运行“完成”脚本。但就我而言,我的进程会动态生成子进程,因此kill我需要 a"killtree"来摆脱它们,而不是 simple 。我怎么做?

我知道它应该通过controlrunit的选项来完成,但是从阅读文档来看,我并不清楚应该如何命名停止脚本:(

http://smarden.org/runit/runsv.8.html

runit

12
推荐指数
1
解决办法
6743
查看次数

runit - 无法打开监督/确定:文件不存在

我试图弄清楚为什么 runit 无法启动或给我托管应用程序的状态。在 Ubuntu 12.04 上运行。

我创建了 /service、/etc/sv/myapp(其中包含一个运行脚本、一个配置文件、一个日志文件夹和一个运行脚本)。我创建了一个从 /service/ 到 /etc/sv/myapp 的符号链接

当我跑

sudo sv s /service/*
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

warning: /service/myapp: unable to open supervice/ok: file does not exist
Run Code Online (Sandbox Code Playgroud)

我的一些谷歌搜索显示,据说重新启动 svscan 服务可能会解决这个问题,但杀死它并运行 svscanboot 并没有什么区别。

有什么建议?我在这里的某个地方错过了一步吗?

daemon init daemontools runit ubuntu-12.04

9
推荐指数
1
解决办法
2万
查看次数

将 runit 与 monit 结合使用有什么意义?

我看到很多人将 monit 与 runit 结合使用。那不是多余的吗?使用 runit 又有什么意义呢?是不是因为它在处理服务时更可靠(因为它不依赖于 pidfiles)?

谢谢!

linux unix monitoring monit runit

8
推荐指数
1
解决办法
1895
查看次数

你如何配置 runit 日志记录

我在使用 runit 设置带有日志记录的服务时遇到问题。以下是我根据 runit 的文档和我在互联网上找到的其他资源创建的文件和脚本的简要概述:

我在 debian 下使用 runit,因此:

/etc/service/test是到 的符号链接/etc/sv/test

/etc/sv/test

$ ls /etc/sv/test
finish  log  run
Run Code Online (Sandbox Code Playgroud)

并且/etc/sv/test/log

$ ls /etc/sv/test/log
config  run
Run Code Online (Sandbox Code Playgroud)

run脚本:

$ cat /etc/sv/test/run
#!/bin/sh

touch /tmp/pid
echo $$ > /tmp/pid

while true; do
    date
    sleep 3
done
Run Code Online (Sandbox Code Playgroud)

finish脚本:

$ cat /etc/sv/test/finish
#!/bin/sh

kill `cat /tmp/pid`
Run Code Online (Sandbox Code Playgroud)

log脚本:

cat  /etc/sv/test/log/run
#!/bin/sh
exec svlogd -t /var/log/test
Run Code Online (Sandbox Code Playgroud)

目录/var/log/test存在,服务运行。

$ sv s test
run: test: …
Run Code Online (Sandbox Code Playgroud)

logging runit

8
推荐指数
2
解决办法
1万
查看次数

如何控制runit服务的自动重启率?

我有这个 runit 服务runlog/run脚本正常工作。

碰巧的是,服务本身可能会因外部原因而崩溃,并且可能在几分钟内无法启动。runit 处理这种情况的默认方式是每隔几秒钟重新启动服务。我该如何改变这种行为?

我的最后一个想法是添加一个check脚本并在那里做一些魔术,但这似乎比应该的要复杂得多。有没有更好更简单的方法?

unix service runit

8
推荐指数
2
解决办法
1597
查看次数

runit 不会在 sv stop 或 sv reload 上终止进程

我正在 AMI Linux 盒子上的 jenkins 服务器上运行无头 selenium 进程,所有进程均由 runit 管理。

问题是,发出“sv stop selenium”或“sv reload selenium”不会终止或杀死其子进程中的旧实例,而只是将它们与runsv进程分离,因此它们在runit不知道的情况下继续运行,从而导致尝试重新启动服务失败。

我认为我的问题与此有关: How to write runit custom stop script

意思是:我可能应该尝试自定义 d 控制脚本,以便手动清理。

我遵循这个想法: /sf/ask/27441571/

然而,从 /etc/sv/selenium/supervise/pid 中获取 pid 并将其转发到循环并没有任何区别。

有什么建议吗?

sv运行脚本:

#!/bin/sh

exec 2>&1
exec chpst -u jenkins -U jenkins /usr/bin/xvfb-run \
--server-args="-screen 0 1024x768x32" \
/usr/bin/java -jar /usr/local/bin/selenium-server-standalone-2.42.1.jar \
-ensureCleanSession \
-browserSessionReuse
Run Code Online (Sandbox Code Playgroud)

daemon service selenium jenkins runit

6
推荐指数
1
解决办法
7596
查看次数

RUNIT - 创建的第一个服务目录,“sv start testrun”不起作用

我对 runit 很陌生。我将它安装在 Ubuntu 主机上。

我做了什么:

1)创建的DIRtestrun/etc/sv

2)创建的脚本run/etc/sv/testrun/run,脚本内容:

#! /bin/bash
exec /root/FP/annotate-output python /root/FP/test.py | logger -t svtest
Run Code Online (Sandbox Code Playgroud)

3)如果我直接调用 /etc/sv/testrun/run 它执行成功

4)我运行sv start testrun(或sv run testrun, sv restart testrun),所有这些都以相同的错误消息结束:

fail: sv: unable to change to service directory: file does not exist
Run Code Online (Sandbox Code Playgroud)

任何想法我做错了什么?我是 runit 的新手,所有操作都基于此处找到的信息:http ://smarden.org/runit/

runit

5
推荐指数
2
解决办法
1万
查看次数

尝试使用 runit 登录只会返回“无法打开监督/确定”

安装runit在 Debian 7.4 中的 Vagrant 中。

我的运行脚本正在运行,但是当我创建 service/pants/log/ 目录时,我开始收到以下错误:unable to open supervise/ok. 我的服务继续运行,但没有记录任何内容。

我尝试了两种不同的服务,但都有相同的问题。

我尝试了各种不同的服务/裤子/日志/运行脚本(主要使用 svlogd),我尝试更改所有内容的权限(a+rwx),存储日志的目录存在并且具有相同的权限。

如果我直接从命令行运行 svlogd,它会按预期工作。

下面的 bash 日志显示了当我重命名/etc/service/pants/_log/etc/service/pants/log并再次返回时会发生什么/etc/service/pants/_log

root@vwb-debian-wheezy:/etc/service# sv s pants/
run: pants/: (pid 29260) 44931s
root@vwb-debian-wheezy:/etc/service# mv pants/{_,}log/
root@vwb-debian-wheezy:/etc/service# sv s pants/
run: pants/: (pid 29260) 44963swarning: pants/: unable to open supervise/ok: file does not exist
; run: log: (pid 29260) 44963s
root@vwb-debian-wheezy:/etc/service# cat pants/log/run
#!/bin/sh

exec svlogd -ttt /var/log/service/pants/

root@vwb-debian-wheezy:/etc/service# ll pants/
total 12 …
Run Code Online (Sandbox Code Playgroud)

debian logging runit

2
推荐指数
1
解决办法
6259
查看次数