Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使这个脚本更好地杀死Rails进程?_Ruby On Rails_Ruby_Bash_Shell - Fatal编程技术网

Ruby on rails 如何使这个脚本更好地杀死Rails进程?

Ruby on rails 如何使这个脚本更好地杀死Rails进程?,ruby-on-rails,ruby,bash,shell,Ruby On Rails,Ruby,Bash,Shell,在我的OSX开发机器上,有时我启动Rails服务器,由于一个错误或事故,我得到了提示,但服务器仍在运行 它经常发生,我写了一个shell脚本来处理它 ~/bin/krr\u kill\u rails\u processs.sh #/bin/bash echo "Rails processes:" ps aux | grep -ie rails | awk '{print}' ps aux | grep -ie rails | awk '{print $2}' | xargs kill -9

在我的OSX开发机器上,有时我启动Rails服务器,由于一个错误或事故,我得到了提示,但服务器仍在运行

它经常发生,我写了一个shell脚本来处理它

~/bin/krr\u kill\u rails\u processs.sh

#/bin/bash

echo "Rails processes:"
ps aux | grep -ie rails | awk '{print}'
ps aux | grep -ie rails | awk '{print $2}' | xargs kill -9
#/bin/bash

echo "Killing Rails processes..."
ps aux | grep -ie rails | grep -v 'grep' | grep -v 'krr' | awk '{print}'
ps aux | grep -ie rails | grep -v 'grep' | grep -v 'krr' | awk '{print $2}' | xargs kill -9
它能工作,但很混乱

$ krr_kill_rails_processes.sh 
Rails processes:
jimpie           76575   0.0  0.0  2432768    632 s002  S+    4:46PM   0:00.00 grep -ie rails
jimpie           76573   0.0  0.0  2433432    968 s002  S+    4:46PM   0:00.00 sh /Users jimpie/bin/krr_kill_rails_processes.sh jimpie           76426   0.0  0.6  3140040  95144 s001  S+    4:42PM   0:04.71 /Users jimpie/.rvm/rubies/ruby-1.9.3-p327/bin/ruby     script/rails s
kill: 76578: No such process
[1]    76573 killed     krr_kill_rails_processes.sh
我如何改进它,以便

  • 它不会发现并杀死自己
  • 它不会找到并杀死grep命令
  • 它不会发出“没有这样的过程”错误
(任何其他建议的改进…)


如果相关的话,这是我启动Rails服务器时的输出

$ bundle exec rails s
=> Booting Thin
=> Rails 3.2.9 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
主要来自

试一试

另外,强烈同意他们关于安装proctools和只做
PKillRails
的建议

e、 g

主要来自

试一试

另外,强烈同意他们关于安装proctools和只做
PKillRails
的建议

e、 g

  • 它不会找到并杀死grep命令
您可以使用
grep-ie[r]ails来代替
grep-ie-rails

#/bin/bash

echo "Rails processes:"
ps aux | grep -ie [r]ails | awk '{print}'
ps aux | grep -ie [r]ails | awk '{print $2}' | xargs kill -9
如果你的操作系统有
pkill
,你可以使用
pkill-9f rails
杀死rails,不需要脚本
有关更多详细信息,请参见
  • 它不会找到并杀死grep命令
  • 您可以使用
    grep-ie[r]ails来代替
    grep-ie-rails

    #/bin/bash
    
    echo "Rails processes:"
    ps aux | grep -ie [r]ails | awk '{print}'
    ps aux | grep -ie [r]ails | awk '{print $2}' | xargs kill -9
    
    如果你的操作系统有
    pkill
    ,你可以使用
    pkill-9f rails
    杀死rails,不需要脚本

    有关更多详细信息,请参见

    如果目的是仅终止一个rails项目的进程,则可以使用
    tmp/pids/server.pid文件中的进程id终止rails服务器:

    [ -f "<project-dir>/tmp/pids/server.pid" ] && kill -9 `cat "<project-dir>/tmp/pids/server.pid`"
    

    如果目的是仅终止一个rails项目的进程,则可以使用
    tmp/pids/server.pid
    文件中的进程id终止rails服务器:

    [ -f "<project-dir>/tmp/pids/server.pid" ] && kill -9 `cat "<project-dir>/tmp/pids/server.pid`"
    

    与在
    Shell
    中启动和终止rails不同,我建议您看看。无需配置,无需维护。您只需要在.pow文件夹中放置一个符号链接。您可以访问“your_project_name.dev”(无需更改主机)

    更好的是,有一个小型GUI应用程序可供您管理


    我建议您查看一下,而不是在
    Shell
    中启动和终止rails。无需配置,无需维护。您只需要在.pow文件夹中放置一个符号链接。您可以访问“your_project_name.dev”(无需更改主机)

    更好的是,有一个小型GUI应用程序可供您管理


    谢谢你的各种建议

    原来我的OSX附带了
    pkill
    ,但它不适合我

    $ ps aux | grep -e rails  
    jimpie           77530   0.0  0.7  3178332 122492   ??  S    Sun05PM   0:35.54 /Users/jimpie/.rvm/rubies/ruby-1.9.3-p327/bin/ruby     script/rails s
    jimpie           83891   0.0  0.0  2432768    608 s000  R+    1:23PM   0:00.00 grep -e rails
    
    $ pkill rails
    
    $ ps aux | grep -e rails
    jimpie           77530   0.0  0.7  3178332 122492   ??  S    Sun05PM   0:35.55 /Users/jimpie/.rvm/rubies/ruby-1.9.3-p327/bin/ruby     script/rails s
    jimpie           83906   0.0  0.0  2432768    624 s000  R+    1:23PM   0:00.00 grep -e rails
    
    $ pkill -9 rails
    
    $ ps aux | grep -e rails
    jimpie           77530   0.0  0.7  3178332 122492   ??  S    Sun05PM   0:35.55 /Users/jimpie/.rvm/rubies/ruby-1.9.3-p327/bin/ruby     script/rails s
    jimpie           83923   0.0  0.0  2432768    612 s000  R+    1:23PM   0:00.00 grep -e rails
    
    $ pkill -9f rails       
    pkill: illegal option -- 9
    usage: pkill [-signal] [-ILfilnovx] [-F pidfile] [-G gid]
                 [-P ppid] [-U uid] [-g pgrp]
                 [-t tty] [-u euid] pattern ...
    
    对于未来的ref,最终发现了grep的
    -v
    选项,并制定了一个脚本来满足我的需求

    ~/bin/krr\u kill\u rails\u processs.sh

    #/bin/bash
    
    echo "Rails processes:"
    ps aux | grep -ie rails | awk '{print}'
    ps aux | grep -ie rails | awk '{print $2}' | xargs kill -9
    
    #/bin/bash
    
    echo "Killing Rails processes..."
    ps aux | grep -ie rails | grep -v 'grep' | grep -v 'krr' | awk '{print}'
    ps aux | grep -ie rails | grep -v 'grep' | grep -v 'krr' | awk '{print $2}' | xargs kill -9
    

    谢谢你的各种建议

    原来我的OSX附带了
    pkill
    ,但它不适合我

    $ ps aux | grep -e rails  
    jimpie           77530   0.0  0.7  3178332 122492   ??  S    Sun05PM   0:35.54 /Users/jimpie/.rvm/rubies/ruby-1.9.3-p327/bin/ruby     script/rails s
    jimpie           83891   0.0  0.0  2432768    608 s000  R+    1:23PM   0:00.00 grep -e rails
    
    $ pkill rails
    
    $ ps aux | grep -e rails
    jimpie           77530   0.0  0.7  3178332 122492   ??  S    Sun05PM   0:35.55 /Users/jimpie/.rvm/rubies/ruby-1.9.3-p327/bin/ruby     script/rails s
    jimpie           83906   0.0  0.0  2432768    624 s000  R+    1:23PM   0:00.00 grep -e rails
    
    $ pkill -9 rails
    
    $ ps aux | grep -e rails
    jimpie           77530   0.0  0.7  3178332 122492   ??  S    Sun05PM   0:35.55 /Users/jimpie/.rvm/rubies/ruby-1.9.3-p327/bin/ruby     script/rails s
    jimpie           83923   0.0  0.0  2432768    612 s000  R+    1:23PM   0:00.00 grep -e rails
    
    $ pkill -9f rails       
    pkill: illegal option -- 9
    usage: pkill [-signal] [-ILfilnovx] [-F pidfile] [-G gid]
                 [-P ppid] [-U uid] [-g pgrp]
                 [-t tty] [-u euid] pattern ...
    
    对于未来的ref,最终发现了grep的
    -v
    选项,并制定了一个脚本来满足我的需求

    ~/bin/krr\u kill\u rails\u processs.sh

    #/bin/bash
    
    echo "Rails processes:"
    ps aux | grep -ie rails | awk '{print}'
    ps aux | grep -ie rails | awk '{print $2}' | xargs kill -9
    
    #/bin/bash
    
    echo "Killing Rails processes..."
    ps aux | grep -ie rails | grep -v 'grep' | grep -v 'krr' | awk '{print}'
    ps aux | grep -ie rails | grep -v 'grep' | grep -v 'krr' | awk '{print $2}' | xargs kill -9
    

    为什么
    pid
    更好?为什么
    pid
    更好?OSXpkill上的pkill-9f rails-OSX上的9f rails