草庐IT

进程注入

全部标签

ruby - 如何从 Ruby 启动和停止 shell 守护进程

我如何启动一个shell守护进程,然后在同一个Ruby脚本中停止它?更具体地说,我希望我的Ruby脚本能够:使用shell命令启动服务器守护进程(railsserver|shotgun|etc...)。在服务器运行时做一些事情。让服务器退出。ruby1.8/1.9和unix/windows支持的所有拥抱解决方案都是首选。(我读过fork例如在Windows上不起作用)。 最佳答案 我强烈推荐RubyDaemonsgem.我认为它具有您需要的所有功能。查看其自述文件的第3部分,并特别注意Daemons.call允许守护进程任意代码的方

ruby - OS X 中作为守护进程运行的脚本的菜单栏图标?

我有一个ruby​​脚本(https://github.com/daemonza/MacBak)作为守护进程在我的macbook上运行并监视一堆目录的文件更改和rsync发生的任何更改。我想知道我能否让它在顶部的菜单栏中创建一个图标?只是为了让我知道它确实在运行,而不必使用ps检查它。也许以后如果需要的话,我可能希望能够从那里控制脚本,简单的带有停止和状态条目的下拉菜单等。从ObjectC看来我可以调用NSStatusItem来获取图标,但我真的只是想通过我的Ruby脚本轻松地完成它。也许我可以做一些applescript调用? 最佳答案

ruby-on-rails - 构建一个集成我的 rails 环境的 ruby​​ 守护进程

我需要构建一个将使用freeswitcher的ruby​​守护进程freeswitch的eventmachine库。几天以来,我一直在网上寻找构建ruby​​守护程序的最佳解决方案,该守护程序将集成我的Rails环境,特别是我的事件记录模型。我看过优秀的RyanBates截屏视频(第129集自定义守护程序),但我不确定这是否仍然是一个实际的解决方案。我如何以好的方式做到这一点? 最佳答案 我一直在为我的Rails环境构建守护进程。守护进程gem确实完成了所有工作。作为示例,这是从我最新的Rails应用程序(script/yourda

ruby-on-rails - 了解为什么 ruby​​ 进程在 100% CPU 时阻塞的方法

我们有一个大型Rails应用程序,几天后,我们的ruby​​进程似乎陷入循环并占用100%的CPU,直到乘客服务器死机并引发502错误。您知道找出原因的最佳方法吗?我已经尝试过NewRelic,但它只是性能方面的东西,而且我们的错误太多了,无法猜测问题出在哪里。(我们每天有很多请求和很多UTF-8BSON错误,因为我们使用的是UTF-8url)使用:Rails3.2.6和Ruby1.9.2p290乘客3.0.13MongoDB2.0.1和Mongoid2.4.11NginxFreeBSD8.2 最佳答案 找出ruby卡住位置的简便方

c# - 为什么 C# ProcessStartInfoRedirectStandardOutput 会导致 xcopy 进程失败

这有点痛苦,因为我现在面前没有代码,但我会尽力解释。我有一个启动Ruby脚本的简单C#应用程序(它还做了一些其他事情,因此它生成了一个批处理文件并执行了)。我正在使用C#进程对象并设置了以下内容重定向标准输出=真重定向标准错误=真UseShellExecute=falseCreateNoWindow=true(可爱的倒退逻辑!)然后我创建两个线程并为错误流和输出流轮询ReadLine(),等待它们完成后再调用WaitForExit()。现在,无论我做什么,当我重定向输出时,我的Ruby脚本都无法调用system("xcopy...")命令(没有生成错误,它只是不复制)。它也不会复制我要

ruby - 注入(inject)双符号运算符

我有一个注入(inject)电话[2,4,6].inject(true){|res,val|res&&val%2==0}并希望发送&&运算符以注入(inject)inject(0,:+)。我该怎么做? 最佳答案 你不能因为&&和||,与其他运算符不同,不是方法的语法糖(即没有称为&&或||的方法),因此您不能使用符号引用它们。但是您可以避免使用inject计算bool值数组的逻辑合取或析取,将其替换为all?或any?分别是因为对于任何数组都满足以下条件:ary.inject(true){|res,b|res&&b}==ary.al

ruby popen3 -- 如何在不重新打开进程的情况下重复写入 stdin 和读取 stdout?

我正在使用Open3的popen3启动在类似控制台中运行的进程的方法/REPL重复接受输入并返回输出的方式。我可以打开流程、发送输入并接收输出,代码如下:Open3.popen3("console_REPL_process")do|stdin,stdout,stderr,wait_thr|stdin.puts"astringofinput"stdin.close_writestdout.each_line{|line|putsline}#successfullyprintsalltheoutputend我想连续多次这样做,而不是重新打开进程,因为启动需要很长时间。我知道我必须关闭std

ruby - 如何获取注入(inject)循环的每个值

我想获取inject的每个值。例如[1,2,3].inject(3){|sum,num|sum+num}返回9,我想获取循环的所有值。我尝试了[1,2,3].inject(3).map{|sum,num|sum+num},但没有成功。我写的代码是这样的,但是我觉得是多余的。a=[1,2,3]result=[]a.inject(3)do|sum,num|v=sum+numresult[4,6,9]有没有办法同时使用inject和map? 最佳答案 使用专用的Eumerator非常适合这里,但我会为此展示更通用的方法:[1,2,3].i

ruby-on-rails - 工头不会杀死进程

对于启动应用程序,我使用Foreman。工头从Procfile开始流程web:bundleexecrailsserverthin-p$PORTworker:bundleexecrakeenvironmentresque:workQUEUE=send_mailapi:bundleexecrailsserverthin-p$PORT如果我在运行foreman的控制台中按control+C,则foreman结束但运行的进程未被终止。是否有可能在工头被杀死时杀死工头运行的进程。 最佳答案 下面的示例假设使用的端口是4567,然后执行:lso

ruby-on-rails - 杀死工头产生的进程

我有以下Procfile:web:bundleexecunicorn-p$PORT-c./config/unicorn.rbredis:bundleexecredis-server/usr/local/etc/redis.confworker:bundleexecsidekiq运行$foremanstart启动Unicorn、Redis和Sidekiq,但我应该如何停止它们?杀死工头会使这三个人都离开。我可以使用ps看到这个:$psaux|grepredis|grep-vgrepme615600.00.025067841740s000S+9:36am0:01.28redis-serve