如何在Rails中停止守护进程服务器?
我正在运行我的rails应用程序使用以下
$script/server -d webrick
在我的Ubuntu系统中,上面的命令在后台运行webrick服务器。 我可以用kill命令杀死进程
$kill pid
rails是否提供了停止后台运行守护进程服务器的命令?
就像由rails提供的启动服务器一样,谢谢。
编辑何时适合启动守护程序服务器? 任何实时情况将有助于谢谢
如何耙任务?
desc 'stop rails' task :stop do pid_file = 'tmp/pids/server.pid' pid = File.read(pid_file).to_i Process.kill 9, pid File.delete pid_file end
使用耙停止或sudo耙停止运行
如果它可以是有用的,在Linux上,你可以find哪个进程正在使用一个端口(在这种情况下,3000),你可以使用:
lsof -i:3000
它也会返回PID
像瑞安说:
你想要的pid是在tmp / pids /
可能server.pid是你想要的文件。
你应该可以运行kill -9 $(cat tmp/pids/server.pid)
来closures守护进程的服务器。
守护程序服务器的进程ID存储在您的应用程序目录tmp / pids /中。 你可以使用标准的kill process_id
和你在那里find的信息。
杀死Ruby on Rails默认服务器(即WEBrick)的唯一正确方法是:
kill -INT $(cat tmp/pids/server.pid)
如果你正在运行Mongrel,这就足够了:
kill $(cat tmp/pids/server.pid)
如果守护进程挂起,请使用kill -9
。 记住kill -9
的含义 – 如果Active Recordcaching中保存的数据没有刷新到磁盘,则将丢失数据。 (正如我最近所做的那样)
在您的terminal中找出进程ID(PID):
$ lsof -wni tcp:3000
然后,使用PID列中的数字来终止进程:
$ kill -9 <PID>
运行这个命令:
locate tmp/pids/server.pid
输出:该文件的完整path。 如果多个文件显示在列表中,请检查您的项目目录名称以查找有关的文件。
然后运行这个命令:
rm -rf [complete path of tmp/pids/server.pid file]
一个Ruby票据, http://bugs.ruby-lang.org/issues/4777 ,表明这是一个内核(Linux)的错误。 他们提供了一个解决scheme(基本上相当于Ctrl-C / Ctrl-Z),如果你已经将服务器妖魔化了,
- kill -INT
cat tmp/pids/server.pid
- kill -CONT
cat tmp/pids/server.pid
这似乎导致原始的INT信号被处理,可能允许数据刷新等等。
pguardiario击败了我,虽然他的实现有点危险,因为它使用SIGKILL
而不是(推荐) SIGINT
。 下面是我倾向于导入到我的开发项目中的一个耙子任务:
LIB /任务/ stopserver.rake
desc 'stop server' task :stopserver do pid_file = 'tmp/pids/server.pid' if File.file?(pid_file) print "Shutting down WEBrick\n" pid = File.read(pid_file).to_i Process.kill "INT", pid end File.file?(pid_file) && File.delete(pid_file) end
当且仅当pidfile存在时才会向服务器发出中断。 如果服务器没有运行,它不会出现难看的错误,并且它会通知您是否真的closures了服务器。
如果您注意到服务器不想使用此任务closures,请在Process.kill "INT"
行后添加以下行,并尝试升级到修复此bug的内核。
Process.kill "CONT", pid
(帽子提示: jackr )
在这里,我留下一个bash函数,如果粘贴在你的.bashrc
或.zshrc
,你将会.zshrc
你的东西,比如:
rails start # To start the server in development environment rails start production # To start the server in production environment rails stop # To stop the server rails stop -9 # To stop the server sending -9 kill signal rails restart # To restart the server in development environment rails restart production # To restart the server in production environment rails whatever # Will send the call to original rails command
这是它的function:
function rails() { if [ "$1" = "start" ]; then if [ "$2" = "" ]; then RENV="development" else RENV="$2" fi rails server -d -e "$RENV" return 0 elif [ "$1" = "stop" ]; then if [ -f tmp/pids/server.pid ]; then kill $2 $(cat tmp/pids/server.pid) return 0 else echo "It seems there is no server running or you are not in a rails project root directory" return 1 fi elif [ "$1" = "restart" ]; then rails stop && rails start $2 else command rails $@ fi; }
更多的信息在我写的博客文章 。
如果您使用-d,我不认为这样做。 我只是杀了这个过程
将来只要打开另一个terminal窗口,使用不带-d的命令,它提供了一些非常有用的debugging输出。
如果这是生产,则使用诸如乘客或瘦客户机之类的东西,以便他们很容易停止进程或重新启动服务器
单行:kill -INT`ps -e | grep ruby | awk“{print $ 1}”
ps -e
列出系统上的每个进程
grep ruby
search输出的ruby进程
awk
将该输出的第一个参数(pid)传递给kill -INT
。
如果你只是想看看PID,可以用echo来代替kill。
如果kill pid不起作用,则删除MyRailsApp中的文件server.pid / tmp / pids /
我来到这里是因为我试图(不成功)停止正常的杀戮,并认为我会做错的事情。
kill -9是在rails服务器上停止ruby的唯一方法吗? 什么!? 你知道这个的含义吗? 可能是一场灾难…