标签: ruby

`kill -s TERM` 有效,`kill -s ABRT` 得到“不允许操作”

有一个我拥有的进程,其文档声称我可以发送SIGABRT到该进程以获取一些调试信息。但是,当我尝试发送时SIGABRT,我得到“不允许操作”。

我还尝试向我拥有的其他进程发送相同的信号,以确保没有一些底层块阻止我SIGABRT完全发送,但它们以适当的方式响应。这只是一个程序,但它是该程序的每个实例。进程的系统调用跟踪显示它从未收到信号。

我已经尝试/bin/kill显式运行以排除我的 shell 的 builtin 中的任何奇怪之处kill,并且除了一些细微的输出差异外,行为没有任何变化。

root 可以发送SIGABRT到进程,它按我的预期工作。

我在这个游戏中已经有一段时间了,但我从未见过用户无法向他拥有的进程发送信号的情况,也没有见过用户可以发送一个信号但不是另一个。

操作系统是 FreeBSD 9.0,进程是一个 ruby​​ 进程,它是在 Apache 下运行的 Phusion Passenger Ruby-on-Rails 应用程序的一部分。

我目前处于完全亏损状态。有谁知道发生了什么?

更新:security.bsd.conservative_signals根据手册页,结果sysctl 被设置为 1,这阻止了许多信号被传递到 setuid 进程。将其设置为 0 可以解决问题。

虽然在进程链的某处有一个 setuid 调用——该进程是 Apache httpd 的子进程,并且 Apache 更改其 uid 以放弃 root 权限——但进程本身不是 setuid,它的 EUID、RUID 和 SVUID 都是与发送信号的用户相同。该过程的唯一检验我能找到这将表明,任何setuid的发生是P_SUGID在标志ps的‘标志’字段。(“自上次执行以来已设置 id 权限”)似乎不应该如此,但它是在 Apache 模块中处理的,我不知道它的确切方法。

作为记录,它是一个 ruby​​ 进程,它作为由 mod_passenger,AKA mod_rails 处理的 Ruby on Rails 应用程序的一部分运行。

freebsd kill permissions signals ruby

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

使用 Ruby 的小型 Linux 发行版

我一直在使用 Puppy Linux 来满足基本的 Linux 需求,但是现在我更喜欢包含 Ruby 的一个,这样就不必下载它了。

我更喜欢可以从 CD 运行的小型发行版,更喜欢较小的发行版以减少启动时间。什么是这个的好选择?

linux livecd distribution-choice ruby small-distribution

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

我可以在 shell 脚本中刷新我的 shell 吗?

我正在尝试设置一个脚本,该脚本以最小的 CentOS 6 安装开始并为 Ruby 开发提供它。

#!/bin/bash

# Add PostgreSQL Repo
rpm -i http://yum.postgresql.org/9.1/redhat/rhel-6-x86_64/pgdg-redhat91-9.1-5.noarch.rpm

# Add NginX Repo
echo '[nginx]' > /etc/yum.repos.d/nginx.repo
echo 'name=nginx repo' >> /etc/yum.repos.d/nginx.repo
echo 'baseurl=http://nginx.org/packages/centos/6/$basearch/' >> /etc/yum.repos.d/nginx.repo
echo 'gpgcheck=0' >> /etc/yum.repos.d/nginx.repo
echo 'enabled=1' >> /etc/yum.repos.d/nginx.repo

# Update
yum update -y

# Install NginX, PostgreSQL, and Ruby Dependencies
yum install -y nginx postgresql91-server postgresql91-contrib gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison piconv-devel sqlite-devel git-core

# PostgreSQL Post Install
service …
Run Code Online (Sandbox Code Playgroud)

shell bash centos ruby

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

Crontab + Ruby on Rails:/usr/bin/env:ruby:没有这样的文件或目录

我有一个 ruby​​ on Rails 应用程序,我需要为 rake 任务安排一个 crontab。

*/5 * * * * RAILS_ENV=production /usr/local/bin/rake -f /usr/local/www/mysite-web-production/current/Rakefile my_site:export_products >> /var/log/export_feed.log 3>&1
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用(当我手动执行它时它可以工作,但不能作为 crontab)并且它向我显示/usr/bin/env: ruby: No such file or directory. 我没有使用RVM。我在 Linux 上使用 ruby​​ 1.9.3 和 Rails 3。

cron path ruby

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

如何在没有 root 的情况下运行脚本来嗅探网络(libpcap)?

我有一个脚本(红宝石):

require 'ffi/pcap'
pcap = FFI::PCap::Live.new(:dev => "wlan0", :timeout => 1)
pcap.loop() do |this,pkt|
  puts pkt.body
end
Run Code Online (Sandbox Code Playgroud)

当我尝试运行脚本时,出现以下错误:

pcap_open_live(): wlan0: 您无权在该设备上捕获(套接字:不允许操作) (FFI::PCap::LibError)

当我在 Mac 操作系统上运行此代码时,一切正常。

我试过:

sudo setcap cap_net_raw,cap_net_admin=eip ~/.rbenv/shims/ruby

sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap

但我仍然有这个问题。

可以在没有 root 的情况下运行此代码吗?授予用户能够通过脚本使用网络设备的权限?

linux libraries ruby network-interface

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

确定自上次以来目录内容是否已更改的最快方法

我有一个脚本,使用 * 检查目录mdls(按添加时间排序),并执行一些操作。然而,mdls它有点慢,所以我\xe2\x80\x99d 喜欢仅在绝对必要时(即目录内容已更改时)才运行它。

\n\n

我的想法是运行mdls一次并缓存结果,然后执行一些操作来跟踪目录的状态。在后续运行中,我\xe2\x80\x99d 再次运行检查操作并将结果与​​我的结果进行比较。如果不同,则重新运行mdls;如果没有,则使用缓存。

\n\n

我\xe2\x80\x99m 考虑其中一个du \'/dir/path\' | tail -1(如果目录大小​​保持等于字节,则\xe2\x80\x99s 可能内容没有\xe2\x80\x99t 更改)或ls \'/dir/path\' | md5\'.

\n\n

我目前更倾向于该md5解决方案,因为它对文件重命名具有弹性。然而,这两种解决方案都很hacky,我想知道是否有\xe2\x80\x99s更有效的东西(仍然很快)。

\n\n

如果有帮助的话,最终该解决方案将在 ruby​​ 脚本中使用。

\n\n
\n\n

* I\xe2\x80\x99m 没有将其发布到Ask Different,因为mdls这不是重点。它可以是任何其他缓慢的命令。

\n

osx directory ruby

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

如何正确自动/手动轮换生产 Rails 应用程序的日志文件

我正在接管一个服务器的管理工作,该服务器有一个定制的 3rd 方 Rails 应用程序。应用程序开发人员告诉我 ruby​​ 日志文件越来越大,并指向我以下链接: - /sf/ask/341872401/

日志位于 /root/production/app/log。该文件夹包含几个以 .log 结尾的文件。当前的日志文件大小约为2GB,文件夹中还有格式为“logname.log.2013_01_18.bz2”的归档日志文件。

我尝试搜索 ssh 命令历史记录以查看是否可以看到用于创建存档文件的命令,但这些命令并没有返回那么远。我还运行了“cat /var/lib/logrotate/status”,但看起来 logrotate 没有旋转上述文件夹中的任何日志。

基本上:

  1. 我希望能够运行一个命令来手动轮换日志和/或让日志在每个星期天晚上自动轮换。
  2. 如果我需要关闭我的 rails 应用程序来轮换日志,我对此没有问题,因为我每周日晚上都有一个维护窗口来执行此操作。
  3. 最后,我不确定我是否应该每周将日志文件压缩到 bz2 中,还是仅每月压缩与上个月相关的任何轮换日志的日志。这主要是因为我不确定这个应用程序是如何使用日志的,而且我从未使用过 Rails 应用程序,也不必手动配置日志轮换。

此时我确实需要保留所有日志文件而不是丢弃任何日志文件。欢迎任何有关轮换日志相关问题的信息,例如在尝试轮换之前备份日志。

logs ubuntu logrotate ruby

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

为什么将 HEREDOC 作为字符串传递给 `ruby -e` 不起作用?

由于我不明白的原因,似乎不可能将 heredoc 作为表达式传递给 Ruby 解释器:

$ ruby -e <<END
heredoc> puts 'hi'
heredoc> END

ruby: no code specified for -e (RuntimeError)
Run Code Online (Sandbox Code Playgroud)

同样的事情也发生在 Perl 上,这让我们很痛苦地发现它与 Ruby 无关。

$ perl -e<<END
heredoc> print 'hi'
heredoc> END
No code specified for -e.
Run Code Online (Sandbox Code Playgroud)

甚至sed

$ echo "blah" | sed -e <<END
pipe heredoc> s/.*/Hi/
pipe heredoc> END
sed: option requires an argument -- e
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... …
Run Code Online (Sandbox Code Playgroud)

quoting ruby here-document

4
推荐指数
1
解决办法
2485
查看次数

使用 gnu find,-print0 和 -printf "%p\0" 有什么区别

在终端中,我可以运行...

find . -type f -print0
./testdir/testfile2.txt./testdir/testfile.txt
Run Code Online (Sandbox Code Playgroud)

进而...

find . -type f -printf "%p\0"
./testdir/testfile2.txt./testdir/testfile.txt
Run Code Online (Sandbox Code Playgroud)

它们在视觉上看起来相同,但由于这是关于空字符,所以并没有说明太多。如果我通过 ruby​​ repl 运行:

2.5.1 :001 > `find . -type f -print0`
 => "./testdir/testfile2.txt\u0000./testdir/testfile.txt\u0000" 
Run Code Online (Sandbox Code Playgroud)

进而

2.5.1 :002 > `find . -type f -printf "%p\0"`
Traceback (most recent call last):
        3: from /usr/share/rvm/rubies/ruby-2.5.1/bin/irb:11:in `<main>'
        2: from (irb):2
        1: from (irb):2:in ``'
ArgumentError (string contains null byte)
Run Code Online (Sandbox Code Playgroud)

-print0选项输出的内容与 有什么区别printf

测试系统信息:

姓名: Linux XPS-15-9570 4.15.0-30-generic #32-Ubuntu SMP Thu Jul 26 17:42:43 UTC 2018 x86_64 x86_64 …

find ruby null

4
推荐指数
1
解决办法
578
查看次数

捆绑有 man 命令吗?

有一个命令bundleruby

我想manbundle. 它存在吗?如果有,我想知道如何查找像bundle gem.

我可以在网上看到它,但我更喜欢在命令行中阅读它。 http://bundle.io/v1.12/man/bundle-gem.1.html

man ruby

3
推荐指数
1
解决办法
652
查看次数