无法停止Rails服务器


126

我是Rails的新手,正在使用ubuntu机器和rubymine IDE。问题是我无法停止Rails服务器。我试图通过终止Rails进程来停止服务器。但是,当我运行时pgrep -l rails,找不到这样的过程。因此,我只能杀死ruby进程,但是服务器不会停止。

我尝试了./script/server stop(因为我是通过运行来启动的./script/server start),但是那没有用。到处搜寻并找到一些stackoverflow帖子,我试图更改localhost端口的侦听端口,但没有成功。有人可以帮忙吗?


2
=> Ctrl-C关闭服务器
gabrielhilal

@Newben你想杀死所有过程吗?
Learner

@Sri,是的,我想杀死所有过程
epsilones

1
@Newben在下面检查我更新的答案,然后尝试让我知道
学习者

Answers:


303

您可以使用其他端口,如下所示:

rails server -p 3001

通常,您可以在终端中尝试Ctrl + C关闭服务器。

销毁Ruby on Rails默认服务器(即WEBrick)的另一种方法是:

kill -INT $(cat tmp/pids/server.pid)

在您的终端中找出该进程的PID:

$ lsof -wni tcp:3000

然后,使用“ PID”列中的数字终止进程:

例如:

$ kill -9 PID

我发现的其他一些答案是:

要在运行Rails服务器时停止它,请按:

CTRL-C
CTRL-Z

您将获得控制权回到bash。然后输入(不带$):

$ fg

这将回到流程中,然后Rails s正确退出。

有点烦人,但这肯定比手动终止进程更有效。这还不错,这是我能找出的最好的方法。

更新的答案:

您可以使用killall -9 rails杀死rails名称中带有“ ”的所有正在运行的应用程序。

killall -9 rails


抱歉,lsof -wni tcp:3000不返回任何内容,并且我没有任何tmp / pids /文件夹
epsilones 2013年

如果Webrick正在运行,则其PID位于{APP_ROOT}/tmp/pids/server.pid文件中,因此只要服务器正在运行,就不必查找它。因此,如果不是ctrl-c只在另一个终端上运行该kill命令,而是立即杀死Webrick服务器。
Learner

当我运行killall -9 rails时,我收到一条消息,提示“未找到这样的进程”?
epsilones

顺便说一句,文件夹{APP_ROOT} / tmp / pids /确实存在,但是它是空的
epsilones

1
这些命令都没有为我做任何事情。但是,重新启动计算机可以解决此问题。
Herb Meehan

51

您可以按以下方式使用grep命令,

ps aux | grep rails

然后

kill -9 {process_id} 

实际上,此命令仅捕获“ 0:00 grep --color = auto rails”,我猜这是称为命令的grep ...
epsilones

感谢此解决方案适用于即使终端强制关闭仍可以运行的服务器。尼斯
ksugiarto

而且,如果我有很多进程,并且不想一一手动杀死它们怎么办?
Nickolay Kondratenko 2015年

您可以通过killall -9 rails
maximus

找到我必须做的服务器ps aux | grep puma
Sami Birnbaum,

27

pkill -9 rails 杀死铁轨的所有过程

更新的答案

ps aux|grep 'rails'|grep -v 'grep'|awk '{ print $2 }'|xargs kill -9

这将杀死任何正在运行的rails进程。用其他东西代替“ rails”以杀死任何其他进程。


18

以下是杀死服务器进程的步骤:

1. lsof -i tcp:3000

2. kill -9 1234

1234进程的PID 在哪里:步骤1中显示的localhost:3000。

要么

删除文件(server.pid),Rails.root/tmp/pids/然后重新启动服务器。

要么

使用以下命令在另一个端口中打开应用程序:

rails s -p 3001



10

我通常使用:

killall ruby

要么

pkill -9 ruby

这将杀死所有正在运行像所有的红宝石相关的流程rails serverrails console


如果您不了解pkill -9或kill -9,也可能要注意,这也可能会杀死其他ruby进程,例如rubymine IDE。
凯耶尔

4

1.只需从rails应用目录中删除pid文件

Rails_app -> tmp -> pids -> pid file

删除文件并运行

rails start


2.对于Rails 5.0及更高版本,可以使用此命令

rails restart


3

使用ctrl+c关机您的WEBrick服务器。

不幸的是,如果它不起作用,则强行关闭终端并重新启动。

另一个技巧是

1. open your system-monitor(a gui application) on ubuntu

2. Select processes tab 

3. Then look for a process having name 'ruby'

4. End that process

即使您重新启动,有时服务器也正在运行。因为我们需要取消temp / pid才能停止服务器
学习者

但是通常情况下,终止终端会停止进程bcoz其前台进程并在终端上运行。
Gopal S Rathore

3

从tmp / pids文件夹中删除server.pid。就我而言,错误是:服务器已在运行。检查/home/sbhatta/myapp/tmp/pids/server.pid。

所以,我删除server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid 然后跑 rails s


3

步骤1:查找消耗3000端口的物品。

lsof -i:3000

步骤2:找到名为

对于Mac

ruby      TCP localhost:hbci (LISTEN)

对于Ubuntu

ruby      TCP *:3000 (LISTEN)

步骤3:找到进程的PID并终止它。

kill -9 PID


2

我曾经按照killall -9 railsSri的建议使用,但没有用。我将命令调整为killall -9 ruby,服务器立即关闭。

Tl; dr: killall -9 ruby



1

如果Rails服务器没有启动,则意味着它已经在运行,那么您可以使用新端口启动。

rails s -p 3001

否则它会启动和停止,在这种情况下,您想删除rails目录结构中的temp文件夹,它将启动rails服务器。


1

检查/tmp/tmp/server.pid

里面有个pid。

通常,我会在cmd中执行“ kill -9 THE_PID”


我没有这条路,在ubuntu机器上可能在哪里?
epsilones

它是隐藏的...转到您的应用程序文件夹,Ctrl + H显示您的隐藏文件,然后您可以看到它
Nich 2013年

1

我在Windows上注意到(我使用10,但不确定是否相同)。如果使用cmd.exe和ctrl + c,则raisl服务器将正确停止。

但是,如果使用Git Bash,则不会。它说有,但是当您查看tmp pid时,它仍然存在。

也许是git bash的错误?


1

killall -9 ruby将杀死所有的ruby进程,并且至少在我的机器上,rails服务器显示为ruby进程。killall -9 rails更加具体,不适用于较旧版本的Rails服务器(它给出了“ rails:no process found”,因为该进程名为ruby)

前一段时间遇到了这个问题。在使用activeadmin提交表单后,rails服务器刚刚挂起,我无法使用常规方法将其杀死(即使在ctrl + z之后它仍在后台运行)。学习者的答案有所帮助,但是此命令不需要进程ID。


0

这个问题来晚了。这是我的2美分。我进行了一个rake任务,以在无法访问服务器时停止服务器。我只在Mac上测试过。

这样,您可以简单地将其添加到项目中,然后运行rake命令。

干得好:

要点链接:-最新版本将在此处。 https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

这里的一些代码:

# Make a file under: `project_root/lib/tasks/server.rake`

# Then paste the following code

    namespace :server do
      desc "Stop the running server by killing the PID"
      task :kill do
        STDOUT.puts "Enter port number: "
        post_number = STDIN.gets.strip
        system "pid=$(lsof -i:#{post_number.to_i} -t); kill -TERM $pid || kill -KILL $pid"
      end
    end

# Then to use it in the terminal: `rake server:kill`

0

另外,请确保在用于启动服务器的同一终端(选项卡)中执行命令Cntrl + C。

就我而言,我有2个标签,但我忘了从正确的标签中停止服务器,我想知道为什么Cntrl + C无法正常工作。


0

一种超级简单的方法是

gem install shutup

然后进入rails项目的当前文件夹并运行

shutup #这将杀死当前正在运行的Rails进程

您可以随时使用命令“ shutup”

求职者:我是这颗宝石的创造者

注意:如果您使用的是rvm,请在全局安装gem

rvm @global do gem install shutup


0

我们可以使用PORT no在Linux上终止Rails会话

fuser -k 3000/tcp 

这里3000是端口号。现在重新启动服务器,您将看到服务器处于运行状态。



0
  1. 只需使用给定的位置打开文件 sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. 找到正在运行该进程的process_id / thread_id。

  3. 使用以下命令杀死指定的进程/线程 kill -9 84699



0

如果您使用的是Rails的更新版本,并且它将Puma用作Web服务器,则可以运行以下命令来查找卡住的Puma进程:

ps aux | grep puma

它将导致类似于以下的输出:

85923 100.0  0.8  2682420 131324 s004  R+    2:54pm   3:27.92 puma 3.12.0 (tcp://0.0.0.0:3010) [my-app]
92463   0.0  0.0  2458404   1976 s008  S+    3:09pm   0:00.00 grep puma

您需要未引用的过程grep。在这种情况下,进程ID为85923。

然后,我可以运行以下命令来终止该进程:

kill -9 85923

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.