Как остановить синатру от бега?
Если ruby myapp.rb
запускает предварительный просмотр sinatra на localhost: 4567, как я могу программно остановить/остановить/убить его? Команда терминала (кроме Ctrl-C) или задач Rake будет в порядке.
Мне нужно включить это в задачу или терминал Rake.
Ответы
Ответ 1
В myapp.rb добавьте это до начала синатра:
puts "This is process #{Process.pid}"
Если вы хотите его убить, сделайте это в оболочке:
kill <pid>
Где <pid>
- номер, выданный myapp.rb. Если вы хотите сделать это в рубине:
Process.kill 'TERM', <pid>
Оба из них позволят синатре запускать процедуру выхода. Если вы не хотите вводить pid каждый раз, пусть myapp.rb откроет файл и поместит его pid в него. Затем, когда вы хотите остановить его, прочитайте файл и используйте его. Пример:
# myapp.rb:
File.open('myapp.pid', 'w') {|f| f.write Process.pid }
# shell:
kill `cat myapp.pid`
# ruby:
Process.kill 'TERM', File.read('myapp.pid')
Ответ 2
В OS X из командной строки (Terminal.app или DTerm) просто введите:
$ killall ruby
каждый рубиновый процесс остановится. Синатра тоже.
В Linux (и других UNIX) вы можете:
$ ps aux | grep ruby
$ kill <ruby-process-id>
Ответ 3
Простой способ сделать это:
kill #{Process.pid}
Ответ 4
Чтобы сделать это простым повторимым способом, существует несколько методов.
-
Запишите ПИД-код при запуске сервера Sinatra, например
# Run the Sinatra server and send it to background (using &)
ruby my_sinatra_server.rb &
# Record the PID of the last background process (using $!)
MY_SINATRA_SERVER_PID=$!
# Now go ahead and do your stuff...
# When finished, kill the sinatra server (from the same shell)
kill $MY_SINATRA_SERVER_PID
-
Вместо использования переменной env ($MY_SINATRA_SERVER
) вы можете использовать временный файл, например. my_sinatra_server.pid
# Run the Sinatra server and send it to background (using &)
ruby my_sinatra_server.rb &
# Record the PID of the last background process (using $!)
echo $! > my_sinatra_server.pid
# Now go ahead and do your stuff...
# When finished, kill the sinatra server (from the same shell)
kill $(< my_sinatra_server.pid)