我想使用 shell 脚本启动 Redis 服务器,然后监控日志文件:
#!/bin/bash
/path/to/redis/src/redis-server &
tail -f /path/to/log/logfile.log
如果我运行此脚本并从终端按 Ctrl+C,tail -f 终止,这是我想要的,但是 Redis 也检测到 SIGINT 并退出。
我试过这样写脚本:
#!/bin/bash
trap '' INT TSTP
~/redis/src/redis-server &
tail -f ./script1
这次事情变得更糟,tail -f 拒绝终止,而 Redis 仍然 检测到 SIGINT 并退出。
在忽略信号方面似乎存在一些 Redis 特有的问题。
我的目标是让 tail -f 响应 Ctrl+C,同时让 Redis 忽略这个信号。
请任何人告诉我这是否可以实现,如果可以,请给我一些建议?
最佳答案
redis-server 捕获 SIGINT (Ctrl+C),即使 SIGINT 被忽略。这是一个不寻常的选择;如果 SIGINT 已被忽略,大多数软件将进行检查并且不会捕获它。
当它收到 SIGINT 时,它会保存数据库并关闭。
如果你start it as a service , 它根本不会与任何终端关联,也不会看到您键入的任何 Ctrl+C。
如果您在交互式 shell 中将其作为后台作业启动:
$ /path/to/redis/src/redis-server &
您的 shell 会将其放入不同于终端进程组的进程组,并且键入 Ctrl+C 不会影响它。 (如果您使用 fg 将它带到前台,Ctrl+C 将向程序发送 SIGINT)。
但是,当您运行这样的脚本时:
#!/bin/bash
/path/to/redis/src/redis-server &
tail -f /path/to/log/logfile.log
运行脚本的 shell 将是非交互式的,它在后台启动的任何程序(使用 &)都将与 shell 在同一个进程组中。因此,如果您在前台运行该 shell 脚本,键入 Ctrl+C 会将 SIGINT 发送到 shell、redis-server,以及尾部。
在这种情况下,要防止 Ctrl+C 向 redis-server 发送 SIGINT,您需要将 redis-server 在它自己的进程组中,或者解除它与你的终端的关联。你可以用 setsid 来做到这一点, 两者兼而有之:
#!/bin/bash
setsid /path/to/redis/src/redis-server &
tail -f /path/to/log/logfile.log
关于linux - 从 shell 脚本启动时使 redis 服务器忽略 Ctrl+C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44474738/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式rubyshell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。