레일 서버를 멈출 수 없음


126

나는 레일을 처음 사용하고 우분투 머신과 루비 민 IDE를 사용하고 있습니다. 문제는 Rails 서버를 멈출 수 없다는 것입니다. 레일 프로세스를 종료하여 서버를 중지하려고했습니다. 그러나 내가 실행할 때 pgrep -l rails그러한 프로세스를 찾을 수 없습니다. 그래서 루비 프로세스 만 죽일 수는 있지만 서버는 멈추지 않습니다.

./script/server stop을 실행하여 시작했기 때문에 시도했지만 ./script/server start작동하지 않았습니다. 인터넷을 검색하고 일부 스택 오버 플로우 게시물을 발견하면서 로컬 호스트 포트의 수신 포트를 변경하려고했지만 성공하지 못했습니다. 누군가 도와 줄 수 있습니까?


2
종료 서버 => Ctrl-C를
gabrielhilal

@Newben 모든 프로세스를 죽이고 싶습니까?
학습자

@Sri는, 그래 나는 모든 프로세스를 종료 할
epsilones

1
@Newben 아래에서 업데이트 된 답변을 확인하고 시험해보고 알려주십시오
Learner

답변:


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

그리고 내가 찾은 다른 답변 중 일부는 다음과 같습니다.

레일스 서버가 실행되는 동안 중지하려면 다음을 누르십시오.

CTRL-C
CTRL-Z

으로 다시 제어 할 수 bash있습니다. 그런 다음 (없이 $)를 입력하십시오 .

$ fg

그리고 이것은 프로세스로 되돌아 간 다음 Rails s제대로 종료 됩니다.

약간 성가 시지만 수동으로 프로세스를 죽이는 것이 확실합니다. 나쁘지 않고 내가 알아낼 수있는 최선입니다.

업데이트 된 답변 :

이름에 killall -9 rails" rails"가있는 모든 실행중인 앱을 종료 하는 데 사용할 수 있습니다 .

killall -9 rails


죄송합니다, -wni TCP lsof를 : 3000 아무것도 반환, 나는이 없습니다있는 tmp / PID를 / 폴더
epsilones

Webrick이 실행 중이면 PID가 {APP_ROOT}/tmp/pids/server.pid파일에 있으므로 서버가 실행되는 한 PID 를 찾을 필요가 없습니다. 따라서 ctrl-c다른 터미널에서 해당 kill 명령을 실행하는 대신 Webrick 서버가 즉시 종료됩니다.
Learner

killall -9 rails를 실행하면 'No such process found'라는 메시지가 나타납니다.
epsilones 12

BTW, 폴더 {되는 app_root} / tmp를 / PID를 / 실제로 존재하지만 비어
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 2016 년

당신은 그들을 모두 죽일 수 있습니다killall -9 rails
막시무스 ツ

내가해야 할 서버를 찾기 위해ps aux | grep puma
Sami Birnbaum

27

pkill -9 rails 레일의 모든 과정을 죽일

업데이트 된 답변

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

이것은 실행중인 레일 프로세스를 종료시킵니다. '레일'을 다른 것으로 교체하여 다른 프로세스를 종료하십시오.


18

다음은 서버 프로세스를 종료하는 단계입니다.

1. lsof -i tcp:3000

2. kill -9 1234

어디에 1234프로세스의 PID이다 : 로컬 호스트 1 단계 (3000)에서 디스플레이.

또는

아래의 파일 (server.pid)을 제거 Rails.root/tmp/pids/하고 서버를 다시 시작하십시오.

또는

다음 명령을 사용하여 다른 포트에서 앱을 엽니 다.

rails s -p 3001


15

내 MAC에서는 killall -9 rails작동하지 않습니다. 그러나 killall -9 ruby그렇습니다.


같은. 즉,이다 COMMAND, 너무 값.
IIllIIll

10

나는 일반적으로 다음을 사용합니다.

killall ruby

또는

pkill -9 ruby

같은 실행중인 모든 루비 관련 프로세스 죽일 것이다 rails server, rails console


pkill -9 또는 kill -9를 모르는 경우 다른 루비 프로세스 (예 : 루비 민 IDE)도 종료 될 수 있습니다.
Kjell

4

1. 간단히 rails 앱 디렉토리에서 pid 파일을 삭제하십시오

Rails_app -> tmp -> pids -> pid file

파일을 삭제하고 실행

rails start


2. Rails 5.0 이상의 경우이 명령을 사용할 수 있습니다

rails restart


3

ctrl+cWebrick Server를 종료하는 데 사용하십시오 .

불행히도 작동하지 않으면 터미널을 강제로 닫고 다시 시작하십시오.

또 다른 트릭은

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를 죽여야하기 때문에
Learner

그러나 일반적으로 터미널을 종료하면 포 그라운드 프로세스의 프로세스가 중지되고 터미널에서 실행됩니다.
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)

우분투

ruby      TCP *:3000 (LISTEN)

3 단계 : 프로세스의 PID를 찾아서 종료하십시오.

kill -9 PID


2

내가 사용 killall -9 rails스리랑카 제안처럼 그것은 작동하지 않았다. 명령을 조정하고 killall -9 ruby서버가 즉시 닫힙니다.

Tl; dr : killall -9 ruby


2

그것은 간단합니다

pkill -9 ruby

아무것도 더 적은 아무것도


1

레일즈 서버가 시작되지 않으면 이미 실행 중임을 의미하며 새 포트를 사용하여 시작할 수 있습니다.

rails s -p 3001

또는 레일스 디렉토리 구조에서 임시 폴더삭제 하려는 경우 레일 서버를 시작합니다.


1

/tmp/tmp/server.pid를 확인하십시오.

안에 pid가 있습니다.

일반적으로 cmd에서 "kill -9 THE_PID"를 수행합니다.


이 경로가 없으므로 우분투 컴퓨터의 어디에 있습니까?
epsilones

그것은 숨겨져 있습니다 ... 앱 폴더로 이동하여 Ctrl + H를 눌러 숨겨진 파일을 표시하면 볼 수 있습니다
Nich

1

Windows에서 눈치 (습니다 (10을 사용하고 있지만 동일한 경우 확실하지 않습니다). cmd.exe 및 ctrl + c를 사용하면 건포도 서버가 올바르게 중지됩니다.

그러나 Git Bash를 사용하면 그렇지 않습니다. 그것은 가지고 있지만 tmp pid를 볼 때 여전히 거기에 있습니다.

git bash에 버그가 있습니까?


1

killall -9 ruby 모든 루비 프로세스를 종료하고 내 컴퓨터에서 최소한 레일 서버는 루비 프로세스로 나타납니다. killall -9 rails훨씬 더 구체적이며 이전 버전의 레일 서버에서는 작동하지 않습니다 (프로세스 이름이 ruby이기 때문에 'rails : no process found'가 나타납니다)

얼마 전에이 문제가 발생했습니다. activeadmin에서 양식을 제출 한 후 레일 서버가 중단되어 정상적인 방법을 사용하여 죽일 수 없었습니다 (ctrl + z 후에도 백그라운드에서 계속 실행 중임). 학습자의 답변이 도움이되었지만이 명령에는 프로세스 ID가 필요하지 않습니다.


0

이 질문에 늦었다. 여기 내 2 센트입니다. 서버에 액세스 할 수 없을 때 서버를 중지시키는 레이크 작업을 만들었습니다. 그래도 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에서 레일 세션을 종료 할 수 있습니다

fuser -k 3000/tcp 

여기서 3000은 포트 번호입니다. 이제 서버를 다시 시작하면 서버가 실행 상태임을 알 수 있습니다.


0

다음과 같이하세요:

  1. 프로젝트를여십시오
  2. tmp 폴더에서 선택
  3. pids 폴더를 선택하십시오
  4. server.pid 파일 삭제
  5. 이제 Rails 서버를 시작하십시오

Rails 5.2 애플리케이션에서 작동하지 않았습니다. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri

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

레일 6을 사용하여

ps aux | grep rails 서버 프로세스를 반환하지 않았습니다

해야 했어요

ps aux | grep puma

실제 프로세스를 찾아서

kill -9 {process_id}


0

최신 버전의 Rails를 사용하고 Puma를 웹 서버로 사용하는 경우 다음 명령을 실행하여 걸린 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

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.