有一个我拥有的进程,其文档声称我可以发送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 应用程序的一部分运行。
我一直在使用 Puppy Linux 来满足基本的 Linux 需求,但是现在我更喜欢包含 Ruby 的一个,这样就不必下载它了。
我更喜欢可以从 CD 运行的小型发行版,更喜欢较小的发行版以减少启动时间。什么是这个的好选择?
我正在尝试设置一个脚本,该脚本以最小的 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) 我有一个 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。
我有一个脚本(红宝石):
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 的情况下运行此代码吗?授予用户能够通过脚本使用网络设备的权限?
我有一个脚本,使用 * 检查目录mdls(按添加时间排序),并执行一些操作。然而,mdls它有点慢,所以我\xe2\x80\x99d 喜欢仅在绝对必要时(即目录内容已更改时)才运行它。
我的想法是运行mdls一次并缓存结果,然后执行一些操作来跟踪目录的状态。在后续运行中,我\xe2\x80\x99d 再次运行检查操作并将结果与我的结果进行比较。如果不同,则重新运行mdls;如果没有,则使用缓存。
我\xe2\x80\x99m 考虑其中一个du \'/dir/path\' | tail -1(如果目录大小保持等于字节,则\xe2\x80\x99s 可能内容没有\xe2\x80\x99t 更改)或ls \'/dir/path\' | md5\'.
我目前更倾向于该md5解决方案,因为它对文件重命名具有弹性。然而,这两种解决方案都很hacky,我想知道是否有\xe2\x80\x99s更有效的东西(仍然很快)。
如果有帮助的话,最终该解决方案将在 ruby 脚本中使用。
\n\n* I\xe2\x80\x99m 没有将其发布到Ask Different,因为mdls这不是重点。它可以是任何其他缓慢的命令。
我正在接管一个服务器的管理工作,该服务器有一个定制的 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 没有旋转上述文件夹中的任何日志。
基本上:
此时我确实需要保留所有日志文件而不是丢弃任何日志文件。欢迎任何有关轮换日志相关问题的信息,例如在尝试轮换之前备份日志。
由于我不明白的原因,似乎不可能将 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) 在终端中,我可以运行...
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 …
有一个命令bundle在ruby。
我想man对bundle. 它存在吗?如果有,我想知道如何查找像bundle gem.
我可以在网上看到它,但我更喜欢在命令行中阅读它。 http://bundle.io/v1.12/man/bundle-gem.1.html