问题标签 [runit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ubuntu - 在 ubuntu 上使用 runit 来守护 spawn-fcgi 进程,并且 pid 每秒都会改变
下面是我在 /etc/sv/myprogram/run 中运行的脚本
当我运行时:
我得到一个不同的pid。这也导致 monit 每次都向我发送电子邮件。
那么……我该如何解决?
nginx - Nginx 和 runit....什么是最佳实践
我对确保 nginx 始终处于启动状态感到很困惑。我对 init.d 脚本的理解只是启动和停止 nginx。这个对吗?然后在文档中说要保持 daemon = off;
现在,我想使用 runit,下面是我的 runit 运行脚本:
我注意到总是会创建一个新的 PID。
总而言之:1)我在nginx文件中没有这个语句:
2)我正在使用上面的 runit 脚本,但它总是创建一个新的 PID。
那么......确保nginx始终运行的最佳实践是什么。
顺便说一句,我正在使用monit,但会运行它来拥有hte daemon。
作为测试,我确实使用 killall -9 nginx 杀死了 nginx,并且我做了一个 ps aux | grep nginx 并注意到我得到了新的 pid。所以..我还需要runit吗?
r - 为什么 RUnit 会改变我的随机数?
在单元测试中,我启动了一个辅助函数(生成测试数据):
我正在交互式开发单元测试,如下所示:
但是当我去运行我的测试时,run_tests.R
他们失败了。set.seed(1)
尽管有命令,我还是把它缩小到不同的随机数!我在 set.seed(1) 之后添加了这一行:
真正有趣的部分是随机种子完全不同。在批处理脚本中只有三个数字:
而在我的交互式 R 会话中,它是一个 626 元素的怪物:
第一个数字,501 与 403,显然是随机数生成器的类型,但我无法在主列表中找到这些数字的含义。
我认为我的问题的核心是确保我的单元测试具有可靠的随机数生成的最佳方法是什么?第二个问题是故障排除建议:我如何跟踪正在使用哪个随机数生成器(更重要的是)哪个代码/包/设置决定使用它?
sessionInfo
看起来不是很有帮助,但它显示了一些小的差异。例如,包含 TTR 包是由于正在运行其他单元测试。这是sessionInfo
批处理脚本的输出,其中第一行是#!/usr/bin/Rscript --slave
:
这是我的交互式 R 会话的输出,它是从命令行启动的R --no-save
:
r - 在 RUnit 或 testthat 中自动生成测试用例
如何在 RUnit 中自动生成测试用例?
例如,假设我有一个简单的 sum() 函数:
我想在一系列不同的测试用例上测试这个功能:
每个向量的前两个元素是 x 和 y,第三个是 sum(x,y) 函数的预期输出。
在 python 中,我可以轻松地编写一个函数,为 test_cases 中的每个元素生成一个测试用例,但我不知道如何在 R 中实现它。我查看了 RUnit 和 testthat 文档,但没有类似的东西。这里最好的解决方案是什么?
这就是我用python编写它的方式(使用nosetest启动测试单元):
r - 在多个相互依赖的包上运行测试
我想知道测试多个包的最佳方法是什么。假设我们有两个本地包:
包 pkg1 依赖于 pkg2。我在makefile中使用R CMD检查测试所有包:
由于缺少依赖项而失败。例如,在 Java 中,您可以在路径中包含所有缺失的代码。我可以先安装所有 R src/pkgs,但这会在 R 中的测试结束时留下工件。
是否有任何推荐的方法在 R 中执行此类测试或安装所有软件包是唯一的解决方案?也许有一种方法可以仅使用特定文件夹进行测试,这样其他已安装的软件包不会受到影响?
r - R 使用 TDD (RUnit) 开发生物导体包
我正在尝试遵循BioConductor RUnit 指南。我遵循了最小设置,所以我有:
Suggests: RUnit, BiocGenerics
在描述中
BiocGenerics:::testPackage("MyPackage")
在 MyPackage/tests/runTests.R
和一些 test_XXX.R 文件MyPackage/inst/unitTests/
如果我运行单个测试文件:
测试运行(并在需要失败时失败),但如果我运行
命令说:
但是不要在MyPackage/inst/unitTests
目录中运行我的测试......
我错过了什么?
amazon-ec2 - 使用 runit 只启动服务而不是监督
我有一个 EC2 设置,其中有一个厨师脚本,可以设置一个带有独角兽的 Rails 应用程序。由于我使用的是application_ruby脚本,该脚本使用runit在启动时启动 Unicorn,我遇到了这个问题,我需要在启动后手动禁用 runit sudo sv once app
。否则,runit 将干扰 Unicorn 的零停机时间部署,并开始生成新的 unicorn 主机,这些主机会不断出错,从而阻止未来的 Unicorn 重启。
所以我一直在寻找一种方法,让 runit 只启动初始 Unicorn 实例,然后不对其进行监督,这样当部署脚本重新启动原始 Unicorn 实例时,它不会自动生成新的 Unicorn 实例。目前,我的/etc/sv/app/run
样子如下:
我现在必须做的是手动调用sudo sv once app
以防止 runit 稍后吓坏,但我不想手动执行此操作。我尝试添加sv once app
到我的末尾/etc/sv/app/run
,但没有效果。
有任何想法吗?
python - 捕获由 runit 发送的信号(sv stop)
我有一个运行多个工作进程的 python 程序。因为这必须正确处理以避免孤立进程,所以我实现了一个信号处理程序来关闭所有工作进程。
该程序或多或少像这样开始:
- 启动进程池(启动 X 个工人)
- 注册信号处理程序 (
signal.signal(signal.SIGTERM, my_signal_handler)
)。SIGINT
我还为同一个处理程序添加了另一个信号处理程序。 - 启动单独的线程轮询后端(数据库)并将任务添加到进程池。
- 在主线程上,轮询进程池以获取结果(
multiprocessing.Queue
单个工作人员将结果添加到结果中)。
这个想法是在 3 和 4 中启动的两个单独的线程保持任务通过机器运行。
如果我手动启动它并调用kill -15 <pid>
或者kill -2 <pid>
它正确地关闭了一切,等待进程到join()
. 从文档中读取,runit 将 a 发送TERM
到进程,然后是CONT
. 但是,在 runit 下运行它,它只是显示标准ok: down: <my_program>: 1s, normally up
,但进程仍在后台运行(即使是主进程,它也是 UNTOUCHED)。
如果我之后出去并手动终止该进程,我可以在日志文件中看到它正确关闭。我究竟做错了什么?似乎 runit 只杀死了我为激活 virtualenv 而创建的 3 行 shell 脚本,但留下了实际的 python 进程。
即使我直接运行“运行”脚本,我也可以运行kill
或 Ctrl+C(与 相同SIGINT
)并且它会正确关闭。
ruby - Git pull 使拉取的文件处于奇怪的状态
我在使用 git 时遇到了一个非常奇怪的问题。我有一个 ruby 应用程序在运行在 runit 管理下的服务器上。此应用程序具有自动更新功能。它执行git ls-remote
以检查是否需要拉取和服务重新启动。这部分工作正常,执行内容并拉取文件,但是:拉取之后,所有拉取的更改都保留在"changes not staged for commit"
. 执行git reset --hard
repo 后,没有为提交进行任何更改,但 repo 的本地副本显示它领先于origin/branch
X 次提交。
我不确定为什么会发生这种情况以及如何解决问题。有没有人经历过类似的事情?任何指针表示赞赏。
软件在 Ubuntu 12.04、ruby 1.9.3p448 上运行,为简单起见以 root 身份运行(runit 作为 root 运行)。文件具有正确的权限,至少看起来是这样。
代码可以在这里看到:https ://github.com/radekg/rgossip_app/blob/dev/lib/updater.rbgit pull
和
都不起作用。git fetch
git reset
*更新:*
git status
返回:
git diff
:
这就是这个提交:https ://github.com/radekg/rgossip_app/commit/176e7cf764ff9ea0299ef75a21bb79a5bea11406
执行后git reset --hard
我得到:
ruby-on-rails - 使用 Runit 和用户的 RVM 启动 Unicorn
我正在使用 Chef 部署我的 Rails 应用程序服务器。刚刚从 Ruby 的源代码安装切换到 RVM(因为我的部署用户有问题)。
现在我已经对我的部署进行了排序,编译了资产并安装了我所有的 gem。
我遇到的问题是用 Runit 监督独角兽..
RVM 没有以 root 用户身份安装 - 只有我的部署用户拥有它,如下所示:
我可以从我的部署用户成功手动启动 Unicorn。但是,它不会作为 runit 的一部分启动。
我的运行文件看起来像这样。我也尝试过这个SO question中的解决方案,但没有成功。
如果我手动运行它,我会收到此错误:
我创建了一个以 root 身份运行的小脚本(此处为 gist )。但是,如果我从 runit 调用它,我会看到工作人员启动,但我得到了两个 runit 进程,我无法停止或重新启动服务:
ps的输出:
我应该在这里做什么?回到运行良好的监视器?