Ruby on rails 如何使这个脚本更好地杀死Rails进程?
在我的OSX开发机器上,有时我启动Rails服务器,由于一个错误或事故,我得到了提示,但服务器仍在运行 它经常发生,我写了一个shell脚本来处理它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
~/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