Một máy chủ đã chạy. Kiểm tra… / tmp / pids / server.pid. Thoát - đường ray


80
..$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
A server is already running. Check /home/..name/rprojects/railsapp/tmp/pids/server.pid.
Exiting

cách dễ nhất để giải quyết vấn đề này cho người mới bắt đầu rails là gì?



Xóa tempthư mục có thể khắc phục sự cố của bạn.
shah

Câu trả lời:


168

Bạn có thể xóa server.pidtệp.

rm /your_project_path/tmp/pids/server.pid

Khác:

thử trong OSX:

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

hoặc trong linux:

ps -aef | đường ray grep

hoặc là

lsof -wni tcp:3000

giết quá trình bằng cách sử dụng

kill -9 PID (eg,2786)

1
Nitpicking - nhưng tôi nghĩ ý bạn là OSX, không phải iOS. @SCraig Điều này được thực hiện trong dòng lệnh.
jmknoll

1
Tôi đã xóa tệp .pid của máy chủ và vẫn gặp sự cố. Khởi động lại hệ thống của tôi, mặc dù không lý tưởng, là một cách khắc phục nhanh chóng.
Matt

Làm việc như người ở!
William Hampshire

Thưa ông, làm thế nào tôi có thể ngăn chặn điều này? Điều đó xảy ra với tôi rất thường xuyên, tôi cảm thấy nhàm chán khi xóa server.pid theo cách thủ công.
Umagon

130

Lệnh đơn dòng ngắn và sắc nét sẽ xử lý nó.

kill -9 $(lsof -i tcp:3000 -t)

7
lol, bạn có thể muốn đóng tab trình duyệt của mình trước nếu bạn mở tab này đến localhost: 3000, nếu không điều này có thể giết trình duyệt của bạn
TMin

có ai đã thử lưu cái này làm bí danh trong zsh và nó không hoạt động không?
stackjlei

Đôi khi máy chủ của tôi đã bị tắt nhưng ruby ​​đã sử dụng hết CPU. Khi rubytopkill -9 <PID>
rơi

17

server.pid chỉ chứa ID tiến trình của máy chủ đang chạy.

Nếu bạn làm:

more /your_project_path/tmp/pids/server.pid

bạn sẽ nhận được một số (giả sử 6745) mà bạn có thể sử dụng để dừng máy chủ trước đó bằng lệnh kill:

kill -9 6745

và sau đó bạn có thể xóa tệp bằng rmlệnh

rm /your_project_path/tmp/pids/server.pid

1
Việc bao gồm các dấu gạch ngược server.pidsẽ khiến trình bao cố gắng thực thi server.pid, phải không?
mwfearnley

14

Nếu bạn đang sử dụng docker-comp, và trong docker-compos.yml có: volumes: - .:/myapp Điều đó có nghĩa là không gian làm việc cục bộ của bạn được ánh xạ tới thư mục / myapp của vùng chứa.

Mọi thứ trong / myapp sẽ không bị xóa đối với các tập xác định.

Bạn có thể xóa ./tmp/pids/server.pidtrong máy cục bộ của mình. Khi đó / myapp của vùng chứa sẽ không có tệp này.


4
Bạn cũng có thể chỉ đơn giản là xóa tập tin tự động trên tất cả các đầu container: command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'". Refs: github.com/docker/compose/issues/1393#issuecomment-99988242
leymannx

12

Đơn giản:

vào thư mục gốc của dự án khi điều này xảy ra và chạy:

gem install shutup
shutup

Thao tác này sẽ tìm thấy quá trình hiện đang chạy, giết nó và xóa tệp pid

LƯU Ý: nếu bạn đang sử dụng rvm, hãy cài đặt gem trên toàn cầu

rvm @global do gem install shutup

5

Vấn đề có thể được giải quyết bằng cách sử dụng:

kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)

5

Đôi khi nó xảy ra do bạn tắt máy chủ bằng cách cưỡng bức, ví dụ như tắt hệ điều hành / máy theo cách thủ công khiến máy chủ không có đủ thời gian để đăng nhập vào server.pid.

Một cách dễ dàng là truy cập thủ công tmp/pids/(thư mục được hiển thị trong bảng điều khiển của bạn.) Và xóa server.pidtệp. Sau đó, khi bạn khởi động lại máy chủ, rails serverhoặc rails snó tạo ra một server.pid mới và bạn có thể tiếp tục phát triển.


3

cách gui cho người dùng Windows

mở ResourceMonitor (taskmanager -> Performance -> ResourceMonitor) và diệt quá trình ruby.exe

nhập mô tả hình ảnh ở đây


3

Mở path/to/your/rails/project/tmp/pids/server.pidtệp.

Sao chép số bạn tìm thấy trong đó.

Chạy kill -9 [PID]

Trong trường hợp [PID]là số bạn đã sao chép từ các server.pidtập tin.

Điều này sẽ giết quá trình máy chủ đang chạy và bạn có thể khởi động lại máy chủ của mình mà không gặp bất kỳ sự cố nào.


3

Diệt server.pid bằng lệnh:

kill -9 `cat /root/myapp/tmp/pids/server.pid`

Lưu ý: Sử dụng đường dẫn server.pid của bạn hiển thị trong bảng điều khiển / thiết bị đầu cuối.

Cảm ơn bạn.


3

Để biết thêm thông tin, trong bối cảnh chạy ứng dụng trong docker.

Trong tệp docker-compile.yml, bên dưới chính vùng chứa ứng dụng, bạn có thể sử dụng một trong các cách sau:

command: ["rm /your-app-path/tmp/pids/server.pid && bundle exec bin/rails s -p 3000 -b '0.0.0.0'"]

hoặc là

command: ["rm /your-app-path/tmp/pids/server.pid; foreman start"]

Lưu ý việc sử dụng ;hoặc &&, &&sẽ gửi tín hiệu thoát nếu rmkhông tìm thấy tệp, buộc bộ chứa của bạn phải dừng sớm. Đang sử dụng ;sẽ tiếp tục thực thi.

Tại sao điều này được gây ra ngay từ đầu? Cơ sở lý luận là nếu máy chủ (puma / thin / anything) không thoát sạch, nó sẽ để lại pid trong máy chủ gây ra lỗi thoát.

Để có tính di động thay vì xóa tệp trên hệ thống máy chủ theo cách thủ công, tốt hơn hết bạn nên kiểm tra xem tệp có tồn tại trong tệp được viết kịch bản hay không.


3

Đầu tiên Tìm PID # - nơi Máy chủ Rails gặp sự cố

Chạy cái này để tìm PID bị kẹt

cat ./tmp/pids/server.pid

Nó sẽ trả về một cái gì đó như 65829

Sau đó GIẾT PID đó =>kill 65829


2

Chạy lệnh này -

lsof -wni tcp:3000

thì bạn sẽ nhận được bảng sau:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    2552 shyam   17u  IPv4  44599      0t0  TCP 127.0.0.1:3000 (LISTEN)
ruby    2552 shyam   18u  IPv6  44600      0t0  TCP [::1]:3000 (LISTEN)

Chạy lệnh này và thay thế PID từ bảng trên

kill -9 PID

thí dụ:

kill -9 2552


0

Đối với vấn đề này,

Những gì tôi đã làm là:

  • Xóa thư mục Pids nằm bên dưới app/tmp/
  • và sau đó, đóng thiết bị đầu cuối mà chúng tôi đang chạy ứng dụng hiện tại và đóng tab (trong, cửa sổ trình duyệt)

  • sau đó, mở lại terminal bằng cách vào bên trong thư mục, rồi thực hiện, rails s

  • Sau đó, nó mở tab mới đang chạy ứng dụng của chúng tôi

0

đầu tiên sao chép cumber bên trong tệp, sau đó xóa nó: rm /your_project_path/tmp/pids/server.pid rồi tạo lại. chạm vào /YOUR_PROJECT_PATH/tmp/pids/server.pid Nó hoạt động với tôi.


0

Chạy lệnh dưới đây trên thiết bị đầu cuối (chỉ dành cho linux)

ps aux | grep rails

và sau đó

kill -9 [pid]

Cách khác

lsof -wni tcp:3000

và sau đó

kill -9 [PID]

0

GIẢI QUYẾT

Địa chỉ đã được sử dụng - lỗi bind (2) ”500 trong Ruby on Rails

Gần đây, tôi đã thử chạy ứng dụng Rails trên máy chủ sản xuất. Nó không những không hoạt động mà còn làm hỏng máy chủ phát triển localhost: 3000 của tôi. Localhost sẽ chỉ tải một trang trắng trống hoặc lỗi 500.

Để giải quyết vấn đề này, tôi đã sử dụng hai lệnh nhanh. Nếu những điều này không trả lại kết quả, bạn có thể cần phải tìm kiếm giải pháp khác, nhưng đây là một cách khắc phục nhanh tốt.

lsof -wni tcp: 3000

ruby 52179 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (LISTEN)
ruby 52179 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (NGHE)
ruby 52180 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (LISTEN)
ruby 52180 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (NGHE)

Lệnh này hiển thị tất cả các quy trình hiện đang chạy của tôi và PID (ID quy trình) của chúng trên cổng 3000. Bởi vì có các quy trình đang chạy không đóng đúng cách, máy chủ mới: 3000 của tôi không thể khởi động, do đó lỗi 500.

giết 52179

giết 52180

đường ray s

Tôi đã sử dụng lệnh kill Linux để dừng các quy trình vi phạm theo cách thủ công. Nếu bạn có nhiều hơn 4, chỉ cần sử dụng kill trên bất kỳ PID nào cho đến khi lệnh đầu tiên trở lại trống. Sau đó, hãy thử khởi động lại máy chủ localhost: 3000 của bạn một lần nữa. Điều này sẽ không làm hỏng máy tính của bạn! Nó chỉ đơn giản là giết các quy trình ruby ​​hiện có trên cổng localhost của bạn. Một máy chủ mới sẽ bắt đầu lại tất cả các quá trình này. Chúc may mắn!


0

GIẢI PHÁP cho Windows:

  1. xem pid từ \ tmp \ pids \ server.pid
  2. mở cmd với tư cách quản trị viên
  3. taskkill / F / PID [pid từ bước 1]
  4. xóa tệp server.pid
  5. khởi động lại máy chủ

0

Đối với ubuntu 20, kill -9 $(ps -aef | grep rails)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.